c++ - 如何使用 ostream_iterator 打印到文件?

标签 c++ random

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

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

关于c++ - 如何使用 ostream_iterator 打印到文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46800762/

相关文章:

c++ - 通用 Makefile 中所需的预构建规则

java - 为什么所有 java 方法都是隐式可覆盖的?

random - Lua,随机性如何?

random - 在 Julia 中生成唯一的随机数

haskell - Haskell和State Monad的随机数序列,我做错了什么?

c++ - std::ofstream 无缘无故地重复和丢失写入的数据

c++ - 通过函数修改数组元素

c++ - 错误(“some string”)仅显示错误,不显示错误+字符串

java - 在Java中生成随机Long值

random - 表值返回零?