反向迭代器的刪除

2021-09-11 08:29:13 字數 1308 閱讀 3596

正向迭代器可以正常使用erase操作,進行刪除操作。但是反向迭代器如果直接使用erase傳遞乙個反向迭代器的引數會報錯,但是他們是繼承的關係,所以可以使用base()進行轉換已達到刪除的目的。 即使用 (++it).base()作為erase的引數。

multimapmm;

mm.insert(make_pair(3, 2));

mm.insert(make_pair(3, 1));

mm.insert(make_pair(1, 4));

mm.insert(make_pair(2, 3));

for (auto it : mm)

cout << "----------" << endl;

for (auto it = mm.rbegin(); it != mm.rend(); ++it) }

for (auto it : mm)

這是一種很機智的方法,當然再找到這個方法之前,總不能被卡主,想想還有沒有其他的方法。有的,那就是將所有的鍵值資料全部儲存,然後刪除需要刪除的元素即可。例:multimap的資料 <1,2><1,3><1,4><2,3><3,4><3,3>要刪除<3,4>,原本可以使用正向迭代器刪除,但是如果資料量特別大,或者就必須使用反向迭代器呢?使用反向迭代器將所有鍵值為3的都刪除,前提是將鍵值為3的資料儲存起來,然後再將儲存的資料重新寫入。

multimapmaptmp;

maptmp.insert(make_pair(3, 2));

maptmp.insert(make_pair(3, 1));

maptmp.insert(make_pair(1, 4));

maptmp.insert(make_pair(2, 3));

for (auto it : maptmp)

cout << "------" << endl;

auto it = maptmp.rbegin();

multimap::size_type cnt = maptmp.count(it->first);

int x = cnt;

vectorvetmp(cnt+1);

int ii = 0;

for (; cnt > 0; cnt--, it++)

--it;

int tmp = it->first;

maptmp.erase(it->first);

for (int i = 0; i < x - 1; ++i)

for (auto it : maptmp)

好蠢的辦法啊。。。

迭代器 反向迭代器

c primer 中文版第四版 第273頁 9.3.2 begin和end成員 begin和end操作產生指向容器內第乙個元素和最後乙個元素的下乙個位置的迭代器,如下所示。這兩個迭代器通常用於標記包含容器中所有元素的迭代範圍。c.begin 返回乙個迭代器,它指向容器c的第乙個元素 c.end 返回...

C 迭代器之 反向迭代器

反向迭代器 reverse iterator 是普通迭代器的介面卡,通過重新定義自增和自減操作,以達到按反序遍歷元素的目的。如果在標準演算法庫中用反向迭代器來代替普通的迭代器,那麼執行結果與正常情況下相反。除此之外,其用法與普通迭代器完全一樣,我們不作詳細討論。這裡主要討論的是反向迭代器的乙個很特殊...

C vector反向迭代器的使用

反向迭代器其實沒什麼特殊的,他只是在遍歷的方向上和普通迭代器不通而已 每乙個容器裡面都有iterator 迭代器 可以從容器的begin位置到end 1位置,通過 來遍歷。同樣也有個反向迭代器reverse iterator,從rbegin end 到rend begin 1 反向遍歷,仍然通過 來...