我有一个包含6291456个数字的.txt文件,没有别的。在读出全部并将push_back
读入向量后,vector.size()
函数返回6291457.此附加元素来自何处?
int disparity;
ifstream disparity_txt;
disparity_txt.open(path);
while(!disparity_txt.eof())
{
disparity_txt >> disparity;
vec_disparities.push_back(disparity);
}
cout << vec_disparities.size() << endl;
disparity_txt.close();
答案 0 :(得分:5)
不要使用while(!disparity_txt.eof())
it does not do what you think(eof
只会在读取流结束后设置,因此通常最后一次迭代是错误的):
做:
while(disparity_txt >> disparity)
{
vec_disparities.push_back(disparity);
}
答案 1 :(得分:2)
使用while (!in.eof())
几乎总是错误的
从流中提取数字时停止循环失败(如quantdev的回答所示)或使用用于从流中填充容器的标准库工具:
std::ifstream disparity_txt(path);
vec_disparities.assign(std::istream_iterator<int>(disparity_txt),
std::istream_iterator<int>());
你可以使用它的构造函数打开一个fstream,析构函数会关闭它,你不需要明确的open
和close
调用。
在C ++ 11中,它甚至更简单:
vec_disparities.assign(std::istream_iterator<int>{std::ifstream{path}}, {});