void Data::readstock(void) { ifstream file("D:\\price.txt"); string line; vector<Data> p; while (getline(file, line)) { stringstream ss(line); Data new_pe; stock new_stock; ss >> new_stock.num >> new_stock.name >> new_stock.price1 >> new_stock.price2 >> new_stock.price3; new_pe.s.push_back(new_stock); p.push_back(new_pe); } file.close(); for (int i = 0; i < p.size(); i++) { for (int j = 0; j < p[i].s.size(); j++) { p[i].s[j].print(); } } }为甚么向量下标超出范围
时间: 2024-03-31 11:38:38 浏览: 73
FILE_COPY-and-RENAME.rar_site:www.pudn.com
在这段代码中,向量p是一个存储了Data对象的向量,而每个Data对象中都只有一个股票对象stock。在读取price.txt文件时,每读取一行就创建一个新的Data对象,并将该行数据转换为股票对象stock,将该股票对象添加到新建的Data对象的向量s中,最后将新建的Data对象添加到p向量中。
在遍历p向量中的Data对象和其中的股票对象时,循环的上限应该是p.size()和p[i].s.size(),而不是p.size()-1和p[i].s.size()-1。因为向量的下标是从0开始的,所以当循环变量i或j等于p.size()或p[i].s.size()时,就超出了向量的范围。因此应该将for循环中的条件改为i < p.size()和j < p[i].s.size()。
阅读全文