如何使用ostream_iterator打印到文件?

时间:2017-10-17 23:42:28

标签: c++ random

我有以下代码(从here mooched)随机化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;
}

1 个答案:

答案 0 :(得分:2)

std::cout的类型和std::ofstream类型都来自std::ostream,与std::ostream_iterator操作的类型相同:

#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;
}