这是我的功能:
void loadfromfile(string fn, vector<string>& file){
int x = 0;
ifstream text(fn.c_str());
while(text.good()){
getline(text, file.at(x));
x++;
}
//cout << fn << endl;
}
我传入的fn的值只是文本文件的名称('10a.txt') 我传入的文件的值声明如下:
vector<string> file1;
我没有定义尺寸的原因是因为我不认为我必须使用矢量,它们是动态的......不是吗?
此函数应该读取给定的文本文件,并将每行的全部内容存储到单个向量单元格中。
实施例。将第一行的内容存入file.at(0) 将第二行的内容存入file.at(1) 依此类推,直到文本文件中没有任何行。
错误:
在抛出'std :: out_of_range'的实例后终止调用 what():vector :: _ M_range_check
我认为while循环中的检查可以防止出现此错误!
提前感谢您的帮助。
答案 0 :(得分:3)
向量file
为空,file.at(x)
将超出范围异常。您需要std::vector::push_back:
std::string line;
while(std::getline(text, line))
{
file.push_back(line);
}
或者你可以简单地从文件中构造字符串向量:
std::vector<std::string> lines((std::istream_iterator<std::string>(fn.c_str())),
std::istream_iterator<std::string>());
答案 1 :(得分:0)
file.at(x)
访问第x个位置的元素,但必须存在,如果不存在则不会自动创建。要向量中添加元素,您必须使用push_back
或insert
。例如:
file.push_back(std::string()); // add a new blank string
getline(text, file.back()); // get line and store it in the last element of the vector