c++ - 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;
}
}
解决方案
您的内部循环增加了错误的变量。它实际上是一个无限循环,因为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
推荐阅读
- javascript - 初始化动态添加的select2
- excel - 将工作表添加到主工作表 VBA
- javascript - 未捕获的 SyntaxtError:尝试导入 React 时出现意外标识符
- css - 绝对定位对语音激活软件的影响
- hive - 从 Hive 表中选择每列值的随机行
- forms - Magento 1.9 发送自定义表单 - 在控制器中找不到表单数据
- oracle - JMeter:变量中的数据库clob
- ibm-watson - 将邮件服务器与 watson 发现服务集成以处理传入邮件
- azure-devops - 将批量用户添加到 Visual Studio Team Service (Azure DevOps)
- firebase - Firestore 规则 get() 请求中的管道字符