C++ 无效的向量 T 子集


void readGroups(ifstream &filein) {
vector<string> listOfStringTokens;
string tmpLine = "";
string tokens = "";
string courseCode, groupCode, groupName;
int minGroupSize = 0, maxGroupSize = 0;
int counter = 0;
while (filein.good()){
    getline(filein, tmpLine);
    istringstream iss(tmpLine);
    while (!iss.eof()){
        getline(iss, tokens, ';');
        listOfStringTokens.push_back(tokens);
    }
}
tmpLine = "";
tokens = "";
filein.close();
for (unsigned i = 0; i<listOfStringTokens.size(); i++){
    courseCode = listOfStringTokens.at(i);
    groupCode = listOfStringTokens.at(i+1);
    groupName = listOfStringTokens.at(i+2);
    minGroupSize = converter(listOfStringTokens.at(i+3), minGroupSize);
    maxGroupSize = converter(listOfStringTokens.at(i+4), maxGroupSize);
    cout << courseCode << "t" << groupCode << "t" << groupName << "t"
         << minGroupSize << "t" << maxGroupSize << "t" << endl;
    i += 4;
}

}

int converter(string a, int b) {
stringstream convert;
convert << a;
convert >> b;
convert.str("");
convert.clear();
return b; 

}

大家好!

这几乎是我第一次使用向量,现在我陷入了困境。我问题的根源是for loop .at()unsigned i变量的增加,因为我把它曝光了。但是,我必须使它获得适当的输出。所以我需要你的帮助,使这段代码完美运行,而不修改输出的结构。

下面是

它的输出方式:

xxxxxxxxx    xxxxxxx    xxxxxxxxxxxxxxxxxxxx    xx    xx
xxxxxxxxx    xxxxxxx    xxxxxxxxxxxxxxxxxxxx    xx    xx
xxxxxxxxx    xxxxxxx    xxxxxxxxxxxxxxxxxxxx    x     xx
invalid vector<T> subscript

您允许i达到允许访问向量的最大数量。问题是您在调用"at"时添加更多内容。

假设listOfStringTokens包含 12 个元素。想象一下最后一次迭代:i<listOfStringTokens.size()为真,i为 11:

courseCode = listOfStringTokens.at(i);

这将起作用,因为您访问索引 11。

groupCode = listOfStringTokens.at(i+1);

这将不起作用,因为i+1生成的索引超出范围。

您还可以在两个不同的位置递增i

for (unsigned i = 0; i<listOfStringTokens.size(); i++)

和这里

i += 4;

这可能会导致您在以后的某个时间点失去监督。请考虑在第一行执行所有增量。

最新更新