深海重苹果 2021-05-21 18:33 采纳率: 100%
浏览 136
已采纳

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遍第一个页面,我定位了错误就在插入语句无法运行,请问为什么执行不了这里的插入语句呢?

  • 写回答

1条回答 默认 最新

  • qfl_sdu 2021-05-21 19:15
    关注

    if (r != run.end()) {

    continue;

    }

    这里(你贴出来的21行-23行),它在13行的for循环里,你for循环已经判断r != run.end()了,也就是说,你这个if语句永远都是成立的,就一直continue,if下面24行的else语句根本不会执行。

    如有帮助,请采纳一下,谢谢。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算