源於《挑戰程式設計競賽》第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 ...