C++: 泛型演算法
阿新 • • 發佈:2018-11-10
泛型演算法
泛型演算法大多數獨立於任何特定的容器,這些演算法是獨立的(或者稱“泛型的”),他們可以用於不同型別的容器和不同型別的元素。泛型演算法本身不會執行容器的操作,他們只會執行在迭代器之上,執行迭代器的操作。
泛型演算法基本包含在<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(),可呼叫物件) // 此演算法接受一個可呼叫物件,對輸入序列的每一個元素呼叫此物件