尝试使用ifstream读取文件。我遇到以下错误:
vector 下标超出范围
直到我到达打开文件的关闭语句为止,这种情况一直发生,将其删除不会引起异常。
这是一些示例代码:

#include <fstream>
#include <algorithm>
#include <vector>
#include <string>
#include <iterator>
#include <sstream>
#include <iostream>

using namespace std;

int main()
{
    ifstream ifile("myswearwords.txt");

    if (!ifile.is_open())
    {
        cerr << "File not found!\n";
        return false;
    }

    std::vector<std::string> myswearswords;
    std::copy(std::istream_iterator<std::string>(ifile),
        std::istream_iterator<std::string>(),
        std::back_inserter(myswearswords));

//  ifile.close(); -> exception rased, when I reach th ebrakpoint at this point

/// do further work
return 0;
}

有人可以在这里向我解释错误吗?

最佳答案

您发布的代码存在一些编译时问题:

  • 您不用#include <iostream>
  • int main()后没有立即打开大括号
  • 您未声明ifstream ifile

  • 经过所有这些更正,代码可以正常运行:http://ideone.com/mzOyE2

    一旦将数据复制到myswearswords中,ifilemyswearswords之间就不会保留任何连接。因此,您应该不会看到此错误。

    现在显然,即使您能够编译,也不会向我们展示所有实际代码。这样,实际的错误很可能出现在代码的未显示部分。

    顺便说一句,您可以使用vector构造函数评分器来改进代码,而不是随后复制到myswearswords中:
    const vector<string> myswearswords{ istream_iterator<string>(ifile), istream_iterator<string>() };
    

    10-08 08:21