我希望通过某种条件删除容器中的元素(目前是unordered_set)
for (auto it = windows.begin(); it != windows.end(); ) {
if ((*it)->closed() == 0)
it = numbers.erase(it);
else
++it;
}我知道erase(it)会返回the position immediately following the last of the elements erased.,但是
按照标准,它是否是强制性的?在调用erase时,不会导致索引的重新排列吗?对所有的集装箱和平台都是安全的吗?比如说,对于特定平台中的某种类型的容器,可能会有一些神奇的实现。
发布于 2021-01-23 19:07:25
C++标准要求unordered_set::erase保留其余元素的顺序,并在被擦除的元素之后立即返回迭代器。因此,您显示的循环是定义良好的。
unord.req/14 .
erase成员只应使迭代器和对已删除元素的引用无效,并保留未被擦除的元素的相对顺序。unord.req/11表91a.erase(q)删除了q指向的元素。返回紧接q之后的迭代器,然后再擦除.
https://stackoverflow.com/questions/65861564
复制相似问题