C 中泛型演算法

2021-07-05 01:36:28 字數 2998 閱讀 3166

前面幾篇部落格簡單的介紹了幾種標準庫容器,想必大家一定會感覺標準庫中的各個容器的操作函式特別的少。的卻標準庫並沒有給每乙個容器單獨定義很多操作函式,而是提供了一堆通用的函式來供其一起使用。

c++中大多數演算法都定義在標頭檔案algorithm中,當然標頭檔案numeric中定義了一組數值泛型演算法

通常情況下,這些演算法不會直接操作容器,只是遍歷由倆個迭代器指定的元素範圍來進行操作(所以這些演算法一般不會改變容器的大小)

此類演算法只讀取迭代器範圍的俄元素,而不會改變元素

(1)find函式

此函式的功能為查詢指定元素

find函式的前來個引數為迭代器範圍,第三個引數為要查詢的值,返回值為該元素的迭代器,若返回失敗則返回尾部迭代器

具體例項如下

#include

#include

#include

using

namespace

std;

int main(void)

; auto it = find(v.begin(),v.end(),3);

if(it == v.end())

(2)count函式

此函式的功能為找到指定範圍內相等的元素的個數

它的前來個引數為一對迭代器範圍,第三個元素為判斷相等的元素

具體例項如下

#include

#include

#include

using

namespace

std;

int main(void)

; int n = count(v.begin(),v.end(),3);

cout

<<"n = "

0;}

(3)accumulate函式

此函式為得出,給定範圍所有元素的總和

前倆個引數為一對迭代器範圍,第三個引數為和的初始值

具體例項如下

#include

#include

#include

using

namespace

std;

int main(void)

; int sum = accumulate(v.begin(),v.end(),0);

cout

<<"sum"

0;}

(1)fill函式

此函式的功能為將給定範圍內的元素值換為另乙個值

前倆個引數為一對迭代器,第三個引數為替換後的值

具體例項如下

#include

#include

#include

using

namespace

std;

int main(void)

; fill(v.begin(),v.end(),9);

for(auto x:v)

cout

0;}

(2)back_inserter

此函式功能為返回乙個插入迭代器,供我們向容器內插入資料

其引數為乙個迭代器的引用

具體例項如下

#include

#include

#include

using

namespace

std;

int main(void)

cout

0;}

(3)copy函式

該函式的功能為向另乙個目的位置迭代器寫入寫入一段源迭代器內容

前倆個引數為迭代器範圍,第三個引數為目的迭代器

具體例項如下

#include

#include

#include

using

namespace

std;

int main(void)

cout

0;}

(4)replace函式

該函式的功能為將一段迭代器範圍內的元素中等於某個值的元素替換為另乙個值

前倆個引數為一對迭代器,第三個引數為要找的元素的值,第四個引數為被替換後的值

具體例項如下

#include

#include

#include

using

namespace

std;

int main(void)

; replace(v.begin(),v.end(),3,8);

for(auto x:v)

cout

0;}

(5)sort和unique函式

sort函式的功能為給指定範圍內的元素排序(預設公升序),unique函式的功能為將排好序範圍內的元素中重複的元素放到不重複元素之後

此倆個函式的引數都為一對迭代器

具體例項如下

#include

#include

#include

using

namespace

std;

int main(void)

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

//輸出排序後結果

cout

<<"排序之後的結果:";

for(auto x:v)

cout

auto end_it = unique(v.begin(),v.end());

cout

<<"使用unique之後的結果:";

for(auto x:v)

cout

v.erase(end_it,v.end());

cout

<<"去重之後的結果";

for(auto x:v)

cout

0;}

C 泛型演算法

標準庫並未給每個容器都定義成員函式來實現這些操作,而是定義了一組泛型演算法,稱他們為演算法是因為他們實現了一些經典演算法的公共介面,如排序和搜尋 稱他們為排序的是因為它們可以用於不同型別的元素和多種容器型別。大多數演算法都定義在標頭檔案algorithm中。標準庫還在標頭檔案numeric中定義了一...

C 泛型演算法

1 泛型演算法初始 標準庫演算法都是對乙個範圍內的元素進行操作 除了少數例外 並將此範圍稱為 輸入範圍 而且總是使用前兩個引數來表示次範圍,這兩個引數分別代表,要處理的首元素和尾元素之後位置的迭代器。1.1 唯讀演算法 只會讀取輸入範圍內的元素,而從不改變元素 find int sum accumu...

C 泛型演算法

1 泛型演算法定義 泛型演算法 因為它們實現共同的操作,所以稱之為 演算法 而 泛型 指的是它們可以操作在多種容器型別上 不但可作用於 vector 或 list 這些標準 庫型別,還可用在內建陣列型別 甚至其他型別的序列上,這些我們將在本章的 後續內容中了解。自定義的容器型別只要與標準庫相容,同樣...