我正在尝试从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
答案 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
会失败。