1. 程式人生 > >C++: 泛型演算法

C++: 泛型演算法

泛型演算法

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

      泛型演算法基本包含在<algorithm>和<numeric>標頭檔案裡。

演算法的形參模式:

alg (beg, end, other args);

alg (beg, end, dest, other args);

alg (beg, end, beg2, other args);

alg (beg, end, beg2, end2, other args);

注意:迭代器的表示範圍一般都是左閉右開的,如 [begin, end )。

其中,alg 是演算法的名字, beg 和 end 是兩個迭代器,表示演算法所操作的輸入範圍。dest、beg2、end2 都是迭代器引數,如果用到這些引數,他們分別表示的是指定目的位置和第二個範圍。除了這些迭代器引數,一些演算法還會接受額外的、非迭代器的特定引數。

常用的泛型演算法有:   

fill(vec.begin(), vec.end(), value);  // 將value值賦給vec的兩個迭代器指定範圍的每一個元素 
     
accumulate(vec.begin(), vec.end(), initValue);     // 對vec中的元素求和,求和的初始值是initValue 
     
find(vec.begin(), vec.end(), key);   // 在vec中查詢元素key,若找到,則返回結果指向它;否則返回vec.end()      

count(vec.begin(), vec.end(), key);  // 在vec中查詢元素key,統計key出現的次數,並返回。

find_if(vec.begin(), vec.end(),一元謂詞或者lambda表示式) // 他返回第一個使為此返回非零值的元素的迭代器,否則返回尾迭代器

for_each(vec.begin(), vec.end(),可呼叫物件) // 此演算法接受一個可呼叫物件,對輸入序列的每一個元素呼叫此物件