C 標準庫 序列式容器的移除演算法

2021-06-28 11:46:33 字數 2137 閱讀 3095

remove 移除(但不刪除)

移除[fist,last)之中所有與value相等的元素。這一演算法並不真正從容器中刪除那些元素(換句話說容器大小並未改變),而是將每乙個不與value相等(也就是不打算移除)的元素輪番賦給first之後的空間。

如果要刪除那些殘餘資料,可將返回的迭代器交給所在容器的erase() member function。

remove_copy():

移除[first,last)區間內所有與value相等的元素。它並不真正從容器中刪除那些元素(換句話說,原容器沒有任何改變),而是將結果複製到乙個以result標示起始位置的容器身上。

新容器可以和原容器重疊,但如果對新容器實際給值時,超越了舊容器的大小,會產生無法預期的結果。返回值outputiterator指出被複製的最後元素的下一位置。

注意:array不適合使用remove()和remove_if(),因為array無法縮小尺寸,導致殘餘資料永遠存在。對array而言,較受歡迎的演算法是remove_copy()和remove_copy_if()。

stl原始碼:

templateforwarditerator remove(forwarditerator first,forwarditerator last, const t& value)

remove_copy

templateoutputiterator remove_copy(inputiterator first,inputiterator last,outputiterator result,const t& value)

return *result;

}

而對於標準關聯式容器,直接使用earse來移除與value相等的元素,是最佳的方案。

**示例:

//測試remove

#include#include#include#include#include#includeusing namespace std;

int main()

; //測試vector---在移除過程中每一步的結果

cout<<"coll: "vector::iterator pos;

//輸出原序列元素

copy(coll.begin(),coll.end(),ostream_iterator(cout," "));

cout<(cout," "));

cout<(cout," "));

cout<(cout," "));

cout//dequecoll1(data,data+10);

//listcoll1(data,data+10);

//原序列

copy(coll1.begin(),coll1.end(),ostream_iterator(cout," "));

cout<(cout," "));

coutfor(int i=0;i<(sizeof(data)/sizeof(data[0]));i++)

//原序列

copy(coll2.begin(),coll2.end(),ostream_iterator(cout," "));

cout<(cout," "));

cout<

remove_copy_if:

移除[first,last)區間內所有被仿函式pred評估為true的元素。它並不是真正從容器中刪除那些元素(換句話說原容器沒有任何改變),而是將結果複製到乙個以result標示起始位置的容器身上。

新容器可以和原容器重疊,但如果針對新容器實際給值時,超越了舊容器的大小,會產生無法預期的結果。返回值outputiterator指出被複製的最後元素的下一位置。

stl原始碼:

templateforwarditerator remove_if(forwarditerator first,forwarditerator last,predicate pred)

templateoutputiterator remove_copy_if(outputiterator first,outputiterator last,outputiterator result,predicate pred)

} return result;

}

C 標準庫關聯容器

1 關聯容器定義 儲存物件集合的型別,支援通過鍵的高效訪問。和順序容器的本質差別在於 順序容器通過元素在容器中的位置順序儲存和訪問元素,而關聯容器卻是依靠鍵。map和set是兩個基本的關聯容器型別,map以鍵值對的形式組織儲存元素,而set僅儲存鍵。2,pair型別 在utility標頭檔案中定義 ...

C 標準庫 順序容器

二 容器的選擇 三 容器的操作 容器就是特定型別物件的集合。順序容器為程式設計師提供了控制元素儲存和訪問順序的能力,這種順序不依賴於元素的值,而是與元素加入容器時的位置相對應。相比於陣列,它可以很隨意的實現元素的新增 刪除等,我們也無需擔心記憶體分配的問題。要使用容器,必須包含相應的標頭檔案 inc...

c 標準庫之容器

c 最原始的容器之一是陣列。陣列的特點有 1.大小固定 2.單獨存在的陣列建立在棧上,作為物件成員存在的陣列建立在堆上還是棧上則要看作為宿主物件是被建立在堆上還是棧上。棧空間是有限的,所以如果陣列在棧上,則不能容納太多元素,否則會導致stack overflow。c 最原始的容器之二則是用乙個指標指...