std map迴圈遍歷刪除元素出現詭異現象

2021-09-26 13:02:12 字數 959 閱讀 6654

std::mapm1, ,  };

m1.insert(std::make_pair(4, 4));

for (auto it = m1.begin(); it != m1.end();)

這段**在執行的時候會出現if語句執行完繼續執行else語句。為什麼會出現這種現象?

先來看一下map中的erase函式:

可以看到erase並沒有返回值,不像vector一樣會erase會有返回值,表示被刪除元素下乙個元素的位置。

分析上述詭異現象:當元素是2或者3的時候erase(it)會導致it迭代器失效,但是沒有更新迭代器,而是繼續繼續判斷else語句成立所以會繼續執行++it,導致最終程式奔潰。

解決上述問題:如下**

std::mapm1, ,  };

m1.insert(std::make_pair(4, 4));

for (auto it = m1.begin(); it != m1.end();)

for (auto it : m1)

std::cout << it.first << " " << it.second << "\n";

std::mapm1, ,  };

m1.insert(std::make_pair(4, 4));

for (auto it = m1.begin(); it != m1.end();)

else

++it; }

for (auto it : m1)

std::cout << it.first << " " << it.second << "\n";

注:不可以是前置++

std map的安全遍歷並刪除元素的方法

首先我們講遍歷std map,大部分人都能寫出第一種遍歷的方法,但這種遍歷刪除的方式並不太安全。第一種 for迴圈變數 include include includeusing namespace std int main return 0 結果如下 key 0 value 555555555555...

std map 刪除指定條件的元素

在c 開發中,std map是經常使用到的容器,由鍵值就可以取出對應的值。在使用map時,如果想從map中刪除符合某一條件的元素,應該如何操作?我自己剛開始使用erase從迭代器中移除符合我需要刪除條件的鍵值對時,出錯了 include include int main return 0 出現了以下...

List 迴圈遍歷中刪除元素問題一

這裡以arraylist為例介紹list實現類在迴圈過程刪除元素會遇到的問題。乙個arraylist在迴圈過程中刪除,會不會出問題,為什麼?接下來給大家詳細解釋一下在這個過程中會出現的問題和原因及解決方法。arraylist中的remove方法 注意arraylist中的remove有兩個同名方法,...