c++map为何会无法插入?
问题描述:
string choose;
cout << "*************************************************" << endl;
cout << "欢迎使用本程序~" << endl;
cout << "请选择您需要的算法(FIFO、LRU、OPT、LFR、CLOCK):" << endl;
cin >> choose;
int allocation = random(6 - 3 + 1) + 3;
cout << "本次分配的物理块数为:" << allocation << "块!" << endl;
map<int, int>run;
if (choose == "FIFO" || choose == "fifo") {
run.insert(pair<int, int>(pagestream.find(1)->first, pagestream.find(1)->second));
for (auto page = pagestream.begin(); page != pagestream.end(); page++)
{
for (auto r = run.begin(); r != run.end(); r++)
{
if (r->second == page->second)
{
break;
}
else
{
if (r != run.end()) {
continue;
}
else {
if (run.size() < allocation) {
run.insert(pair<int, int>(page->first, page->second));
}
else {
run.erase(run.begin());
run.insert(pair<int, int>(page->first, page->second));
}
}
}
}
for (auto r = run.begin(); r != run.end(); r++)
cout << r->second << " ";
cout << endl;
}
}
我先简单介绍一下我的数据结构,我是用两个map存储数据,一个map(pagestream)存页面流,对应两个元素存的是序号和页面号;另一个map(runstream)存的是运行流。
这里我就是用迭代器,遍历整个页面流,一个个去运行,在这个循环内再嵌套一个运行流的迭代器,遍历整个运行流。我的判断条件是这样的,如果当前页面号和运行流中页面号有任何一个相同的,就跳出这个循环,进行下一个页面的判断;如果迭代到运行流最后一个页面都不相同,就再判断运行流满不满(运行流的大小是否小于allocation),没满就直接把这个页面置入,满了就删掉runstream里的第一个数据,然后再插入这个页面。
但是如此之后,始终运行输出的都只有一个页面,页面流总共320个数据,就输入了320遍第一个页面,我定位了错误就在插入语句无法运行,请问为什么执行不了这里的插入语句呢?
答
if (r != run.end()) {
continue;
}
这里(你贴出来的21行-23行),它在13行的for循环里,你for循环已经判断r != run.end()了,也就是说,你这个if语句永远都是成立的,就一直continue,if下面24行的else语句根本不会执行。
如有帮助,请采纳一下,谢谢。