vector容器 std unique函式的實現

2021-07-06 02:29:12 字數 2111 閱讀 3207

源於《挑戰程式設計競賽》第164頁程式中呼叫的函式unique, 今天好好看看。 

該函式std::unique位於標頭檔案宣告1如下:

template< class forwardit >  

forwardit unique( forwardit first, forwardit last );

宣告2如下:

template< class forwardit, class binarypredicate >  

forwardit unique( forwardit first, forwardit last, binarypredicate p );

該函式的作用為: 刪除[first, last)之間所有連續重複的元素, 只保留乙個。 注意, 是連續重複。 要刪除所有重複的元素, 只需要排序之後, 然後呼叫這個函式即可實現。 第乙個版本通過==判斷是否重複, 第二個版本通過二元謂詞p判斷是否重複。 

二元謂詞p, 就是binary predicate which returns ​

true

if the elements should be treated as equal. 

版本1的可能的實現方式:

templateforwardit unique(forwardit first, forwardit last)  

} return ++result;

}

所一, 最終返回的乙個迭代器指向任務結束的位置past the end.

版本二的實現方式:

templateforwardit unique(forwardit first, forwardit last,   

binarypredicate p)

} return ++result;

測試程式如下:

#include #include #include using namespace std;

int main() ;

ivec.push_back(1);

ivec.push_back(2);

ivec.push_back(2);

ivec.push_back(2);

ivec.push_back(2);

ivec.push_back(2);

ivec.push_back(3);

ivec.push_back(1);

ivec.push_back(3);

vector::iterator last;

last = unique(ivec.begin(), ivec.end());

for(vector::iterator it = last; it != ivec.end(); ++it)

cout << endl;

// 注意上述的輸出, ivector 的size 並沒有變。

//removes all duplicate elements from a

//vector of integers.

vectorivec2;//;

ivec2.push_back(1);

ivec2.push_back(2);

ivec2.push_back(2);

ivec2.push_back(2);

ivec2.push_back(2);

ivec2.push_back(2);

ivec2.push_back(3);

ivec2.push_back(1);

ivec2.push_back(3);

sort(ivec2.begin(), ivec2.end());

vector::iterator last2;

last2 = unique(ivec2.begin(),ivec2.end());

for(int i = 0;i執行結果如下:

2 3 1 3

1 2 3 2 2 2 2 3 3

1 2 3

[finished in 0.4s]

vector向量容器

vector容器是陣列的乙個泛化推廣,不僅可以像陣列那樣進行元素的隨機訪問,還可以在容器的尾端插入新元素,實現了random access container和back insertion sequence概念。vector具有自動的記憶體管理功能,對於元素的插入和刪除,能夠動態調整占用的記憶體空間...

實現vector容器

在c stl中 每一種容器都有其自己對應的迭代器實現。迭代器也成為了演算法和容器之間的橋梁。今天先模擬一下vector 容器,以及對應的迭代器。一 vector實質是可變長的陣列 空間連續 所謂的可變長其實是偽可變長。為了實現可變長,vector的工作實質 1 初始分配空間大小時,分配按實際需求分配...

vector容器型別

vector容器是乙個模板類,可以存放任何型別的物件 但必須是同一類物件 vector物件可以在執行時高效地新增元素,並且vector中元素是連續儲存的。vector的構造 函式原型 templateexplicit vector 預設建構函式,vector物件為空 explicit vector ...