C++ 如何使用ostream_迭代器打印到文件?

C++ 如何使用ostream_迭代器打印到文件?,c++,random,C++,Random,我有下面的代码(mooched from)来随机化1500个值的向量,我想把它们放在一个文本文件中,但不能。老实说,我不完全理解这段代码是如何工作的,所以我希望有人向我解释它是如何工作的和/或如何将输出更改为文件的 #include <iostream> #include <random> #include <algorithm> #include <iterator> #include <fstream> int main() {

我有下面的代码(mooched from)来随机化1500个值的向量,我想把它们放在一个文本文件中,但不能。老实说,我不完全理解这段代码是如何工作的,所以我希望有人向我解释它是如何工作的和/或如何将输出更改为文件的

#include <iostream>
#include <random>
#include <algorithm>
#include <iterator>
#include <fstream>

int main() {
    std::vector<int> v;
    for (int i; i<1500; ++i){
        v.push_back(i);
    }

    std::random_device rd;
    std::mt19937 g(rd());

    std::shuffle(v.begin(), v.end(), g);

    std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, " "));
    std::cout << "\n";

    return 0;
}
#包括
#包括
#包括
#包括
#包括
int main(){
std::向量v;

对于(int i;i而言,
std::cout
的类型和
std::ofstream
的类型都源自
std::ostream
,这与
std::ostream\u迭代器的操作类型相同:

#include <iostream>
#include <random>
#include <algorithm>
#include <iterator>
#include <fstream>

void emit_values(std::ostream& os)
{
    std::vector<int> v;
    for (int i = 0; i<1500; ++i){
        v.push_back(i);
    }

    std::random_device rd;
    std::mt19937 g(rd());

    std::shuffle(v.begin(), v.end(), g);

    std::copy(v.begin(), v.end(), std::ostream_iterator<int>(os, " "));
    os << "\n";
}

int main() 
{
    // use stdout
    emit_values(std::cout);

    // use a file
    std::ofstream fs("values.txt");
    emit_values(fs);
    fs.close();    

    return 0;
}
#包括
#包括
#包括
#包括
#包括
void emit_值(标准::ostream&os)
{
std::向量v;
for(int i=0;i
std::ostream_iteartor
是一个迭代器,从
操作符*()
返回一个对象,该对象在赋值时写入流,后跟字符串分隔符。
std::copy()
将源序列的每个元素分配给目标序列中的一个对象,即每个对象都被写入流。只需将
std::cout
替换为打开以写入目标文件的
std::ofstream
对象即可。