【发布时间】:2013-12-05 17:06:58
【问题描述】:
这是我的代码:
StockAccount::StockAccount() {
vector<string> temp;
string line;
std::ifstream stockfile("Results.txt");
if (stockfile.is_open()) {
while (stockfile.good()) {
getline(stockfile, line);
istringstream ss(line);
string token;
while (std::getline(ss, token, ',')) {
temp.push_back(token);
}
addStock(temp.at(0), temp.at(1), temp.at(2));
temp.clear();
}
stockfile.close();
} else {
cout << "Unable to open file" << std::endl << std::endl;
}
}
我知道它效率不高,这就是我要解决的问题。它应该做的是:
- 逐行读取该文件。
- 解析每一行并用逗号分割。
- 获取这 3 个值并在方法中使用它。
我正在使用该向量 temp 来存储值,将它们添加到函数中,然后将其清除,以便它可以为空并再次用于存储下一个值...等等。
我尝试在 temp.clear() 之前打印出每个值,它们都打印出来,然后我得到错误。所以我知道 temp.clear() 是问题所在。也许我使用了错误的方法,或者有更好的方法。
如果可能,我想尝试不使用 boost。
这是我得到的错误:
libc++abi.dylib: terminating with uncaught exception of type std::out_of_range: vector
Results.txt 是一个看起来像的文件。
goog,525,0 msft,34,10
等等。
【问题讨论】:
-
您正在访问索引
2而不检查向量的大小。超出范围的错误并不令人惊讶。 -
我知道每一行都会有 3 个元素。
-
好的,那一定是编译器的bug。只是开玩笑。
-
哈。我在 Mavericks 上使用 clang++ 和 C++11。
-
如果您发布 Results.txt 的内容并附上可以让我们复制错误的代码,您将获得更好的回复。