C equal 演算法解析

2021-09-24 06:16:55 字數 1434 閱讀 5876

equal()演算法比較簡單,它的作用是比較兩個容器是否相等然後返回布林值,它有兩種過載的實現方式,先看下演算法的定義:

// template function equal with pred

templateinline

bool _equal(_init1 _first1, _init1 _last1,

_init2 _first2, _pr _pred)

這是提供第乙個容器的頭尾迭代器與第二個容器的頭迭代器,遍歷第乙個容器的元素,通過仿函式判斷後,有任一元素不符合條件則返回false,即兩個容器可以不同大小。

預設的仿函式為equal_to<>,其定義為

templatestruct equal_to

};

即判斷兩值是否相等,結合equal()演算法可知其實現為判斷兩個容器相同索引的元素是否相等,以第乙個容器為比較範圍。

而equal()的提供兩個容器頭尾迭代器的過載實現則為

// template function equal with two ranges, pred

templateinline

bool _equal(_init1 _first1, _init1 _last1,

_init2 _first2, _init2 _last2, _pr _pred,

input_iterator_tag, input_iterator_tag)

根據注釋可以得知這種過載適用於任意型別的迭代器,從實現方式上看,其要求兩個容器大小相同且元素相同

templateinline

bool _equal(_init1 _first1, _init1 _last1,

_init2 _first2, _init2 _last2, _pr _pred,

random_access_iterator_tag, random_access_iterator_tag)

根據注釋可以得知這種過載適用於隨機讀取型別的迭代器,從實現方式上看,其要求兩個容器大小相同,然後再呼叫第一種形式判斷。

這兩種形式的過載都要求容器嚴格匹配,相對來說沒有那麼靈活

下面做個演示:

vectora, b;	

cout << "以a為比較範圍,判斷a,b是否相同:" << equal(a.begin(),a.end(),b.begin()) << endl;

cout << "要求容器相同,判斷a,b是否相同:" << equal(a.begin(), a.end(), b.begin(), b.end()) << endl;

DUKPT演算法解析

dukpt derived unique key per transaction 1 是什麼?是一種非常安全的金鑰管理技術,主要應用於對稱金鑰加密mac,pin等安全資料方面 2 主要思想 保證每一次交易流程使用唯一的金鑰,採用一種不可逆的金鑰轉換演算法,使得無法從當前交易資料資訊破解上一次交易金鑰...

KMP演算法解析

日期 2013年5月 1日 字串匹配是計算機的基本任務之一。舉例來說,有乙個字串 bbc abcdab abcdabcdabde 我想知道,裡面是否包含另乙個字串 abcdabd 許多演算法可以完成這個任務,knuth morris pratt演算法 簡稱kmp 是最常用的之一。它以三個發明者命名,...

highestOneBit 演算法解析

integer類有個highestonebit 方法,作用是返回具有單個 1 位的 int 值,在指定值中最高位的 1 位的位置,比如5 00000101 返回4 00000100 highestonebit 的演算法如下 public static inthighestonebit int i 為...