尝试使用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
中,ifile
和myswearswords
之间就不会保留任何连接。因此,您应该不会看到此错误。现在显然,即使您能够编译,也不会向我们展示所有实际代码。这样,实际的错误很可能出现在代码的未显示部分。
顺便说一句,您可以使用
vector
构造函数评分器来改进代码,而不是随后复制到myswearswords
中:const vector<string> myswearswords{ istream_iterator<string>(ifile), istream_iterator<string>() };