istream_iterator初始化向量

时间:2012-10-04 14:34:07

标签: c++ vector istream-iterator

我正在尝试从ifstream fin 读取并使用istream_iterators将其放入向量 vec1 。我已经看到了这些东西:

vector<int> vec1((istream_iterator<int>(fin)),istream_iterator<int>);

我想保留istream_iterators供以后使用,所以我想“这应该有用”:

istream_iterator<int> iit(fin);
istream_iterator<int> eos;
vector<int> vec1(iit,eos);

...它不起作用=(我的向量是完全空的。(我读取的文件是一个只有数字的txt文件)。

编辑: txt如下所示:

06351784798452318596415234561
6641321856006

2 个答案:

答案 0 :(得分:1)

根据评论,第一个数字序列大于int的最大值,因此输入操作将失败,导致vector保持为空。

您可以使用std::numeric_limits模板获取int等的最大值:

std::cout << std::numeric_limits<int>::max() << "\n";

答案 1 :(得分:0)

作为中间步骤,你可能想尝试立即迭代序列以查看是否有某些东西(可能没有):

while (iit != eos) {
    std::cout << *iit++ << '\n';
}

如果没有打印任何内容,请检查您的信息流最初处于良好状态:

if (!fin) {
    std::cout << "file not opened!\n";
}

如果流只包含数字且没有空格,则可能会溢出,因此读取int会失败。