<分区>
#include<set>
std::multiset<int>s;
int main() {
s.insert(1);
s.insert(2);
s.insert(3);
for (auto i=s.rbegin();i!=s.rend();++i) {
auto j=s.lower_bound(*i<<1);
if (j!=s.end())s.erase(j);
}
}
这个程序崩溃了,我收到一条错误消息“map/set iterator not decrementable”。我想既然所有元素都是正整数,那么*i<<1
将大于 *i
,因此 j
的指向位置将不同于 i
.并根据reference :
References and iterators to the erased elements are invalidated. Other references and iterators are not affected.
由于i
的指向位置和 j
不同,删除j
不会影响i
和循环。所以我很困惑为什么它是错误的。
环境:Windows10 x86,Visual Studio 2015 Update 3