首页 > 解决方案 > C++ 行在 for 循环后未执行。循环不是无限的

问题描述

我遇到的大多数答案都归结为无限循环,但我插入了一些 cout 语句用于诊断目的,我完全相信情况并非如此 - 它看起来像嵌套的 for 循环完成但只是跳过在返回到外部 for 循环的顶部之前经过一些行。唯一一次被推回的是在第一次迭代中完全跳过 for 嵌套循环时。照原样,调试器给出了超出范围的向量错误,我认为是因为新的唯一项目没有被推回。任何想法如何解决这个问题?

Template <class T>
void count_unique(string filename, vector<T> input) {
    vector<T> unique;
    vector<int> count;
    bool found = false;

    ifstream fin;
    fin.open(filename);
    T line;
    while (!fin.eof()) {
        fin >> line;
        input.push_back(line);
    }
    fin.close();

    cout << input.size() << endl;
    for (unsigned int i = 0; i < input.size(); i++) {
        cout << input.at(i) << endl;
    }

    for (unsigned int i = 0; i < input.size(); i++) {
        cout << input.at(i) << endl;
        found = false;

        for (unsigned int j = 0; j < unique.size(); i++) {
            cout << unique.at(j) << "\t=\t" << input.at(i) << " ->" << unique.size() << endl;
            if (input.at(i) == unique.at(j)) {
                count.at(j)++;
                found = true;
                cout << "Incremented" << endl;
            }
            else {
                cout << "None;" << endl;
            }
        }

        cout << "Found=" << found << endl;
        if (!found) {
            unique.push_back(input.at(i));
            count.push_back(1);
            found = false;
            cout << "Pushed back" << endl;
            cout << "#";
            for (unsigned int i = 0; i < unique.size(); i++) {
                cout << unique.at(i) << "\t-\t" << count.at(i) << endl;
            }
            cout << "#" << endl;
        }
    }
    for (unsigned int i = 0; i < unique.size(); i++) {
        cout << "\t" << unique.at(i) << "\t=\t" << count.at(i) << endl;
    }
}

标签: c++

解决方案


您的内部循环增加了错误的变量。它实际上是一个无限循环,因为j永远不会改变。这也是为什么你得到的超出范围,i会不断增加,超出范围的大小input

//...
for (unsigned int i = 0; i < input.size(); i++) {
    cout << input.at(i) << endl;
    found = false;

    for (unsigned int j = 0; j < unique.size(); j++) { // HERE

推荐阅读