0

我正在尝试从 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
4

2 回答 2

1

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

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

std::cout << std::numeric_limits<int>::max() << "\n";
于 2012-10-04T14:44:27.113 回答
0

作为中间步骤,您可能想立即尝试迭代序列以查看是否存在某些内容(可能没有):

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

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

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

如果流仅包含数字且没有空格,则它可能会溢出并导致读取int失败。

于 2012-10-04T14:40:48.423 回答