簡體   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