社区讨论

一个有关C++特性的问题

P4747[CERC2017] Intrinsic Interval参与者 5已保存回复 11

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
11 条
当前快照
1 份
快照标识符
@mi7wsfrr
此快照首次捕获于
2025/11/21 04:53
4 个月前
此快照最后确认于
2025/11/21 06:35
4 个月前
查看原帖
我在此题的一份代码中这样写:
CPP
set<int> que;
for(auto j : que)
{
	//do something...
   	que.erase(j)
}
会出现奇怪的问题,即循环会中途结束。但是在本机测试没有任何问题,程序会正常地删除que中的所有元素。
如果改成更保守的写法:
CPP
set<int> que;
for(auto j=que.begin(); j!=que.end();)
{
	auto k = j; k++;
	//do something...
   	que.erase(j);
	j = k;
}
这样程序在洛谷上才能正确执行。
我想上面一种写法可能是一种未定义行为,但是编写c++的人应该会料到有人这么实现。因为采用下面一种保守的方法实在是太冗长了。
因此我就是想问一下究竟是什么导致了程序在洛谷和本地运行结果不同。

回复

11 条回复,欢迎继续交流。

正在加载回复...