如何使用ostream_iterator打印到文件

How to print to file using ostream_iterator?

本文关键字:打印 文件 iterator 何使用 ostream      更新时间:2023-10-16

我有以下代码(从这里开始)来随机化 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;
}

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