从ifstream文件读取错误的大小

YuZ*_*YuZ 0 c++ stl vector ifstream

我有一个包含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();
Run Code Online (Sandbox Code Playgroud)

qua*_*dev 5

不要使用while(!disparity_txt.eof()) 它没有做你想象的(eof只会在读取流结束后设置,所以通常最后一次迭代是错误的):

做:

while(disparity_txt >> disparity)
{
    vec_disparities.push_back(disparity);
}
Run Code Online (Sandbox Code Playgroud)