《從缺陷中學習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雖然不能指定位置插入,但是在插入和刪除操作較快,因為...