本文內容來自C++Plus,本文只是本人的總結和翻譯而已。本人只是C++的搬運工。
原文傳送門:http://www.cplusplus.com/reference/algorithm/mismatch/
mismatch算法:返回第一個找到的兩個空間中不相同的元素。
template <class InputIterator1, class InputIterator2>
pair<InputIterator1, InputIterator2>
mismatch (InputIterator1 first1, InputIterator1 last1, InputIterator2 first2 )
{
while ( (first1!=last1) && (*first1==*first2) ) // or: pred(*first1,*first2), for version 2
{ ++first1; ++first2; }
return std::make_pair(first1,first2);
}
mismatch算法會拿着 [Frist1,Last1) 中的值和[first2,last2)中的元素進行比較,並且返回第一個找到的兩個區間中不匹配的值,並且返回。
#include <iostream> // std::cout
#include <algorithm> // std::mismatch
#include <vector> // std::vector
#include <utility> // std::pair
bool mypredicate (int i, int j) {
return (i==j);
}
int main () {
std::vector<int> myvector;
for (int i=1; i<6; i++) myvector.push_back (i*10); // myvector: 10 20 30 40 50
int myints[] = {10,20,80,320,1024}; // myints: 10 20 80 320 1024
std::pair<std::vector<int>::iterator,int*> mypair;
// using default comparison:
mypair = std::mismatch (myvector.begin(), myvector.end(), myints);
std::cout << "First mismatching elements: " << *mypair.first;
std::cout << " and " << *mypair.second << '\n';
++mypair.first; ++mypair.second;
// using predicate comparison:
mypair = std::mismatch (mypair.first, myvector.end(), mypair.second, mypredicate);
std::cout << "Second mismatching elements: " << *mypair.first;
std::cout << " and " << *mypair.second << '\n';
return 0;
}
注意事項:
如果找到了兩個區間中第一個不相等元素,就會返回這個元素,並且將Frist設置爲last1.如果想接着遍歷比較的話只需要那這個迭代器對象繼續就可以了。