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 為...