C ++:从管道填充矢量

时间:2010-05-19 16:54:53

标签: c++ stl

我想从命令行填写vector<float>

more my.txt | myexe.x > result.txt

在C ++中打开管道的最佳方法是什么? 谢谢 阿尔曼。

3 个答案:

答案 0 :(得分:10)

您的shell会将more的标准输出连接到myexe.x的标准输入。因此,您只需阅读std::cin,无需担心输入是来自键盘还是来自其他程序。

例如:

vector<float> myVec;
copy(istream_iterator<float>(cin), istream_iterator<float>(),
     back_inserter(myVec));

答案 1 :(得分:4)

您可以使用std::copy()中的<algorithm>执行此操作,但不需要额外的依赖项。

#include<iterator>

// ...
std::vector<float> them_numbers(std::istream_iterator<float>(std::cin),
                                std::istream_iterator<float>());

如果您事先知道您期望的确切数量,那么您可以避免重新分配:

std::vector<float>::size_type all_of_them /* = ... */;
std::vector<float> them_numbers(all_of_them);
them_numbers.assign(std::istream_iterator<float>(std::cin),
                    std::istream_iterator<float>());

答案 2 :(得分:2)

该特定管道已附加到您应用的标准输入,因此您可以从那里阅读。