1. 程式人生 > >C++ 泛型演算法unique 和unique_copy :刪除相鄰的重複元素

C++ 泛型演算法unique 和unique_copy :刪除相鄰的重複元素

std::unique

template< class ForwardIt >
ForwardIt unique( ForwardIt first, ForwardIt last );
(1)
template< class ForwardIt, class BinaryPredicate >
ForwardIt unique( ForwardIt first, ForwardIt last, BinaryPredicate p );
(2)

Removes all consecutive duplicate elements from the range [first, last)

and returns a past-the-end iterator for the new logical end of the range.

eg.

int main(int argc, char* argv[])
{
   list<int> ivec1;

   for(list<int>::size_type i = 0;  i<10 ; ++i)
   {
       ivec1.push_back(i);
   }

   ivec1.push_back(9);

   cout<<"original content:"<<endl;
   for(list<int>::iterator i = ivec1.begin() ; i != ivec1.end() ; ++i)
   {
       cout<<*i<<endl;
   }

   vector<int> ivec;

   unique_copy(ivec1.begin(),ivec1.end(),back_inserter(ivec));

   cout<<"after unique_copy:"<<endl;
   for(vector<int>::iterator i = ivec.begin() ; i != ivec.end() ; ++i)
   {
       cout<<*i<<endl;
   }

   list<int>::iterator t = unique(ivec1.begin(),ivec1.end());
    cout<<"after unique:"<<endl;
   for(list<int>::iterator i = ivec1.begin() ; i != t ; ++i)
   {
       cout<<*i<<endl;
   }



   return 0;
}

當list 中元素是0,1,2,3,4,5,6,7,8,9,9時後面的輸出都是0,1,2,3,4,5,6,7,8,9;

但是當list 中元素是0,1,2,3,4,5,6,7,8,9,5後面的輸出都是0,1,2,3,4,5,6,7,8,9,5

結論

======================================

unique 和其copy版本都只能"刪除"相鄰的重複元素

相關推薦

C++ 演算法unique unique_copy 刪除相鄰重複元素

std::unique template< class ForwardIt > ForwardIt unique( ForwardIt first, ForwardIt last ); (1) template< class ForwardIt

C++ STL庫 演算法 find find_if

一:find()函式 函式原型: template<class _InIt, class _Ty> _NODISCARD inline _InIt find(_InIt _First, const _InIt _Last, const _Ty& _

C++ 演算法學習筆記(equal, accumulate, back_iterator, pair)

equal equal是區間比較演算法 原型為: template <class _InputIterator1, class _InputIterator2> inline _LIBCPP_INLINE_VISIBILITY bool equal(_InputIt

C++ 演算法

“泛型”指的是演算法可以用於不同型別的元素和多種容器型別,是獨立於容器的。 泛型演算法通過迭代器間接訪問容器,不會執行容器的操作,只執行在迭代器之上,迭代器可以做什麼,泛型演算法就可以做什麼。 標準庫提供了超過100個演算法,但是都有規律可循。大部分都對一個範圍內的元素進行操作,類似於alg

演算法findfind_if以及sort

一般的查詢方法是寫個函式遍歷這個vector,一個個進行比較查詢。 實際上在使用STL的時候,不建議使用迴圈遍歷的查詢方法,建議使用stl的泛型演算法。理由如下:(參考《effictive c++》46條) 效率:泛型演算法通常比迴圈高效。 正確性: 寫迴圈時比呼叫泛型演算

c# --- 解決輸入輸出型別不確定問題

一、背景 有這樣一個需求:一個方法,他的返回值型別不確定,方法引數的型別不做要求。 二、思考 返回值型別不確定,從繼承的角度,所以類都是object的子類,返回object即可。但是這種方法是型別不安全的,需要進行型別轉換。 我們可以使用泛型解決這個

C# 協變逆變

隨Visual Studio 2010 CTP亮相的C#4和VB10,雖然在支援語言新特性方面走了相當不一樣的兩條路:C#著重增加後期繫結和與動態語言相容的若干特性,VB10著重簡化語言和提高抽象能力;但是兩者都增加了一項功能:泛型型別的協變(covariant)和逆變(contravariant)。許多人

C#資料結構特點

資料結構 Array 陣列 缺點   1在陣列的兩個資料間插入資料是很麻煩的, 2宣告陣列的時候必須指定陣列的長度, 3陣列的長度過長,會造成記憶體浪費,過段會造成資料溢位的錯誤。 ArrayList 陣列 是個介面 1裝箱拆箱 效率低 2資料型別不安全  List 陣列

C++ 演算法

泛型演算法   泛型演算法大多數獨立於任何特定的容器,這些演算法是獨立的(或者稱“泛型的”),他們可以用於不同型別的容器和不同型別的元素。泛型演算法本身不會執行容器的操作,他們只會執行在迭代器之上,執行迭代器的操作。       泛型演算法基本包含在&

四種讀寫檔案的方式系統呼叫(open/read/write),C語言(fopen,fgets, fputs),C++(ifstream, ofstream getline,)演算法

第一種方法是系統呼叫 (1)open系統呼叫    原型:        #include <sys/types.h>        #include <sys/stat.h>        #include <fcntl.h>     

C# 的簡單講解應用

出現 ava 問題 this bsp div arc 但是 int 泛型 什麽是泛型   泛型是 2.0 版 C# 語言和公共語言運行庫 (CLR) 中的一個新功能。泛型將類型參數的概念引入 .NET Framework,類型參數使得設計如下類和方法成為可能:這些類和方

C# 委托

color program object turn cnblogs urn task pub cdd using System; using System.Collections.Generic; using System.Linq; using System.Text;

C#中的抗變協變

cep 就是 idt oid pre set 協變 nbsp 通過 在.net4之前,泛型接口是不變的。.net4通過協變和抗變為泛型接口和泛型委托添加了一個重要的拓展 1、抗變:如果泛型類型用out關鍵字標註,泛型接口就是協變的。這也意味著返回類型只能是T。 實例:

c++中常用的演算法

    std中定義了很好幾種順序容器,它們自身也提供了一些操作,但是還有很多演算法,容器本身沒有提供。 而在algorithm標頭檔案中,提供了許多演算法,適用了大多數順序容器。與c++11相比,很多函式在 c++17與c++20又改變了很多,下面內容基於c++11去簡單介紹.

C++ primer筆記----演算法

1、泛型演算法:演算法是因為其實現了一些經典演算法的公共介面,如排序和搜尋。泛型是因為他們可以作用於不同型別的元素和多種容器型別甚至是內建陣列。故稱泛型演算法 2、基本上都定義在algorithm和numeric兩個標頭檔案中,這些演算法遍歷由兩個迭代器指定的一個元素範圍來進行操作,不對

#乾貨分享Java 的擦除執行時資訊獲取

Java 的泛型擦除 程式設計師界有句流行的話,叫 talk is cheap, show me the code,所以話不多說,看程式碼。 如果有想學習java的程式設計師,可來我們的java學習扣qun:79979,2590免費送java的視訊教程噢!我整理了一份適合18年學習的java

C++ primer學習筆記——第十章 演算法

標準庫容器定義的操作集合驚人的小。標準庫並未給每個容器新增大量功能,而是提供了一組演算法,這些演算法中的大多數都獨立於任何特定的容器。這些演算法是通用的(generic,或稱泛型的):它們可以用於不同型別的容器和不同型別的元素 一、概述 大多數演算法都定義在標頭檔案alg

C++Primer讀書筆記十——演算法.md

概述 在前一篇我們介紹了容器的基本概念以及使用其成員函式進行增刪改查,但有的時候我們還希望對容器進行更多的操作,比如:查詢特定元素,替換元素等。而標準庫並未給出此類成員函式, 此時需要引入algorithm標頭檔案,其中定義了一系列的操作演算法。 這些演算法不直

C++ STL庫—— 基礎演算法copy

copy   函式原型: template<class _InIt, class _OutIt> inline _OutIt copy(_InIt _First, _InIt _Last, _OutIt _Dest) { // copy [_Firs

C#、引用型別、值型別Object的效能比較

最近在看C#的泛型,據CLR via C# (第4版)上的說明,泛型是最優的。 對此,先秉持著懷疑的心態的看問題,先驗證一下是否如此。 以下在Main()中實現了個示例,例證的思路是:通過多次執行呼叫,統計並比較不同型別呼叫的時間。 static void M