繁体   English   中英

使用迭代器遍历 for 循环时插入和删除 Multiset 元素

[英]Insertion and Deletion of Multiset Elements while Traversing through for loop using iterators

在这里,我在遍历multiset时对multiset执行erase操作和insert操作。 我写的代码是:

#include <bits/stdc++.h>

using namespace std;

int main(){
    multiset<int> ms;
    ms.insert(6);
    ms.insert(7);
    ms.insert(8);
    ms.insert(9);
    ms.insert(10);
    for(auto it = ms.begin();it != ms.end();it++){
        cout << *it << endl;
        ms.erase(it);
        if(*it == 6){
            ms.insert(4);
        }
    }
}

上面代码的输出是:6 7 4 8 9 10

我无法理解输出以及 4 如何作为输出的一部分打印!!

有谁知道输出的解释???

在使用迭代器遍历 for 循环时,我在 set 上尝试了不同的插入和删除操作。 总是卡在某个点,无法理解输出!

正如您在multiset::erase文档中看到的那样:

对已擦除元素的引用和迭代器无效

因此在这一行之后:

ms.erase(it);

任何取消引用it的尝试(就像你在下一行中使用*it所做的那样)都是UB未定义行为)。
这意味着任何事情都可能发生。

一些旁注:

  1. 为什么我不应该#include <bits/stdc++.h>?
  2. 为什么“使用命名空间标准;” 被认为是不好的做法?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM