使用迭代器從map或vector中刪除元素

2021-09-26 05:43:18 字數 707 閱讀 3807

std:map的迭代器:刪除時只影響當前元素

#include "stdafx.h"

#include std::mapm;

int main()

else

}printf("2 m.len = %d\n", m.size());

return 0;

}

【原因分析】

it++的操作可拆分為三個步驟:

首先把 it 備份一下。

把 it 加上1。

返回第一步備份的 it 。

所以標準寫法中執行m.erase(it++);語句,在執行erase之前,it 已經被加1了。erase會使得以前那個未被加一的 it 失效,而加了一之後的新的 it 是有效的。

等效寫法將標準寫法進行了拆分。

m.erase(it); // erase以後,it 已經失效,不能再用 it++;

那麼erase操作直接讓 it 失效,對失效的 it 進行 ++ 操作也是失效的。

std::vector的迭代器,刪除時自動返回下乙個元素的位置,所以erase時要取出返回值。

#include std::vectorm;

int main()

else

}printf("2 m.len = %d\n", m.size());

return 0;

}

map的迭代器

iterator iter map.entryset iterator map的迭代器,用作遍歷map中的每乙個鍵值對 iterator是迭代器,map之前應該定義過,姑且認為是hashmap。表示map中的鍵值對都是string型別的。map.entryset 是把hashmap型別的資料轉換成集...

Map迭代器的使用方法

public static void main string args system.out.println key value 2 foreach迴圈 獲取key value for object key map.keyset 獲取value for object value map.values...

Map介面和迭代器

使用iterator迭代器的缺點 1.listiterator有add 方法,可以向list中新增物件,而iterator不能 2.listiterator和iterator都有hasnext 方法,可以實現順序向後遍歷,但是 listiteator裡面有hasprevious 和previous ...