泛型演算法 判斷序列相等演算法equal

2021-10-12 17:48:01 字數 1828 閱讀 4756

equal()演算法用來比較兩個序列是否相等

equal(序列1首元素迭代器,序列1尾元素後面的位置的迭代器,序列2首元素迭代器)

序列1和序列2可以是不同型別的序列。比較的前提是元素可以使用「==」比較,對於自定義的資料,必須過載「==運算子」。

struct ceshi

};

自定義乙個結構體,過載「==」運算子,當該結構體物件的frist和second都相等時才認為兩個物件是相等的。

std::listlist1;

qlistlist2;

ceshi c1;

c1.frist = 10;

c1.second = 20;

list1.push_back(c1);

list2 << c1;

ceshi c2;

c2.frist = 30;

c2.second = 40;

list1.push_back(c2);

list2 << c2;

ceshi c3;

c3.frist = 50;

c3.second = 60;

list1.push_back(c3);

list2 << c3;

bool result = std::equal(std::begin(list1),std::end(list1),std::begin(list2));

qdebug()用乙個標準庫的list和乙個qt的list分別儲存相同的資料,比較兩個list的結果是相等。

分別存乙個不同是資料,結果變成不相等:

再舉個例子:

std::listlist1;

qmapmap;

ceshi c1;

c1.frist = 10;

c1.second = 20;

list1.push_back(c1);

map.insert(1,c1);

ceshi c2;

c2.frist = 30;

c2.second = 40;

list1.push_back(c2);

map.insert(2,c2);

ceshi c3;

c3.frist = 50;

c3.second = 60;

list1.push_back(c3);

map.insert(3,c3);

ceshi c5;

c5.frist = 90;

c5.second = 100;

list1.push_back(c5);

ceshi c6;

c6.frist = 110;

c6.second = 120;

list1.push_back(c6);

bool result = std::equal(std::begin(list1),std::end(list1),std::begin(map));

qdebug()<:list>

注意:1、第二個序列中元素的個數不能少於第乙個序列中元素的個數,否則程式會報錯。標準庫中像這樣第二個序列只用乙個迭代器表示的演算法都有這樣的要求

2、假如第1個序列中的元素個數少於第2個序列中元素個數,且第乙個序列中的元素全部和第二個序列中元素相同(序列1是序列2的真子集),那麼比較結果也是true

C 泛型演算法

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

C 泛型演算法

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

C 泛型演算法

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