首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在循环中使用擦除(It)对所有容器和平台都是安全的吗?

在循环中使用擦除(It)对所有容器和平台都是安全的吗?
EN

Stack Overflow用户
提问于 2021-01-23 16:26:12
回答 1查看 55关注 0票数 0

我希望通过某种条件删除容器中的元素(目前是unordered_set)

代码语言:javascript
复制
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时,不会导致索引的重新排列吗?对所有的集装箱和平台都是安全的吗?比如说,对于特定平台中的某种类型的容器,可能会有一些神奇的实现。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-23 19:07:25

C++标准要求unordered_set::erase保留其余元素的顺序,并在被擦除的元素之后立即返回迭代器。因此,您显示的循环是定义良好的。

unord.req/14 .erase成员只应使迭代器和对已删除元素的引用无效,并保留未被擦除的元素的相对顺序。unord.req/11表91 a.erase(q)删除了q指向的元素。返回紧接q之后的迭代器,然后再擦除.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65861564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档