multiset容器erase函式的誤用

2021-08-16 07:42:41 字數 705 閱讀 3095

《從缺陷中學習c/c++》第3章庫函式問題,本章主要介紹庫函式的使用中會遇到的問題。使用庫函式可以降低軟體開發的難度,提高**編寫的效率。本節為大家介紹multiset容器erase函式的誤用。

2013-11-28 15:29

收藏 分享

3.16  multiset容器erase函式的誤用

**示例

int main()  

return 0;  

}  現象&後果

**期望刪除乙個值為3的元素,但實際執行結果顯示刪除了所有值為3的元素。

bug分析

multiset帶乙個引數的erase函式原型有兩種。一是傳遞乙個元素值,如上面例子**中,這時候刪除的是集合中所有值等於輸入值的元素,並且返回刪除的元素個數;另外一種是傳遞乙個指向某個元素的iterator,這時候刪除的就是這個對應的元素,無返回值。使用者需要根據自己的應用場景,正確呼叫對應的原型。例子**中本意是想刪除乙個元素,但實際上是刪除了所有值為3的元素,不符合預期。

正確**

int main()  

return 0;  

}  程式設計建議

在使用multiset的時候,需要注意mutilset與普通set容器的主要區別,即multiset允許元素重複,set不允許元素重複。這會給一些操作帶來不同的影響

收藏於:

list vector map容器erase的區別

一句話總結 list vector返回的迭代器,map返回空 c 98標準 注意迭代器不要越界。map是從模板類繼承來的,不同的c 版本標準其erase函式也不同 c 98 c 11 void erase iterator position iterator erase const iterator...

set容器和multiset容器的區別

無法使用和at方式訪問 for int i 0 i s.size i cout endl voidm const multiset int m cout endl void test else multiset容器與set區別在於前者可以插入重複元素 multiset int m1 multiset...

set和multiset容器簡介

set和multiset容器簡介 開發工具與關鍵技術 c visualstudioset 是乙個集合容器,其中所包含的元素是唯一的,集合中的元素按一定的順序排列。它其他的 容器不同,它是不能指定位置插入的,它的元素插入過程是按排序規則插入的。set雖然不能指定位置插入,但是在插入和刪除操作較快,因為...