我是c ++的新手。我学得很快,但我还不知道。
我无法在此函数中看到索引的问题:
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;
void get_rows(string filepath, vector<string> &rows);
int main() {
vector<string> rows;
get_rows("ninja.txt", rows);
for (int i = 0; i < rows.size(); i++) {
cout << rows[i] << endl;
}
}
void get_rows(string filepath, vector<string> &rows) {
ifstream file;
file.open(filepath);
string str;
int index = 0;
while (!file.eof()) {
getline(file, str);
rows[index] = str;
index++;
}
}
任何帮助将不胜感激。
答案 0 :(得分:3)
您构建了一个std::vector<string>
对象:
vector<string> rows;
然后你试图访问它的元素,尽管这个载体中还没有元素:
rows[index] = str;
您应该使用push_back
方法将新元素推送到向量中:
rows.push_back(str);
另请注意,使用while (!file.eof())
是错误的,因为getline
可能会在循环内失败:
while (!file.eof()) {
getline(file, str);
...
}
你的循环应该看起来如下:
while (std::getline(file, str)) {
if (str.empty()) continue; // we skip empty lines
rows.push_back(str); // and push non-empty lines at the end
}
答案 1 :(得分:0)
vector<string> rows;
^
size() is 0
get_rows("ninja.txt", rows);
void get_rows(string filepath, vector<string> &rows) {
//...
int index = 0;
rows[index] = str; // but there is no rows[0] yet
//...
}
您应该使用push_back
将新元素添加到vector
中,或者在开头创建一个具有指定大小的vector
(如果已知)
vector<string> rows(160);
它比前者更有优势,因为你可以避免潜在的重新分配(这可能使指向矢量元素的指针失效,)