mismatch

来源:互联网 发布:网络电影 重大题材备案 编辑:程序博客网 时间:2024/05/16 07:52
pair<InputIterator1, InputIterator2> mismatch (InputIterator1 beg, InputIterator1 end, InputIterator2 cmpBeg);pair<InputIterator1, InputIterator2> mismatch (InputIterator1 beg, InputIterator1 end, InputIterator2 cmpBeg, BinaryPredicate op);

功能:
第一形式返回区间[beg, end)和以cmpBeg开头的区间之中的第一组两两相异的对应元素
第二形式返回区间[beg, end)和以cmpBeg开头的区间之中的第一组”使op(elem, cmpElem)结果为false“的对应元素

备注:

a、如果没有找到相异点,就返回一个pair,以end和第二序列的对应元素组成。这并不意味着两个序列相等,因为第二序列有可能包含更多的元素
b、调用者必须保证以cmpBeg开头的区间具有足够的元素
c、如果想要了解两个序列是否相等,应使用equal()算法
d、注意op在函数调用过程中不应该改变自身状态
e、op不应该改动传进来的参数

f、时间复杂度:线性

提示:利用该算法可以进行两个区间的相等性比较,这样比equal算法作两次检查要好得多

#include <iostream>#include <vector>#include <algorithm>using namespace std;bool strEqual(const char* s1, const char* s2)  {  return strcmp(s1, s2) == 0 ? true : false;  } int main(int argc, char *argv[]){int arr[] = {77,13,100,51};int arr1[] = {77,3,100};vector<int> vec(arr,arr + sizeof(arr)/sizeof(arr[0]));vector<int> vec1(arr1,arr1 + sizeof(arr1)/sizeof(arr1[0]));typedef vector<int>::iterator iter;pair<iter,iter> pa = mismatch(vec.begin(),vec.end(),vec1.begin());if (pa.first == vec.end() && pa.second == vec1.end()){cout << "vec 和 vec1完全相同" << endl;  }else if (pa.first == vec.end()){cout << "第一组不相同的元素为(vec.end()" << "," << *pa.second << ")" << endl;}else if (pa.second == vec1.end()){cout << "第一组不相同的元素为(" << *pa.first << ",vec1.end())" << endl;}else{cout << "第一组不相同的元素为(" << *pa.first << "," << *pa.second << ")" << endl;}char* str1[] = {"appple", "pear", "watermelon", "banana", "grape"};  char* str2[] = {"appple", "pears", "watermelons", "banana", "grape"};  pair<char**, char**> retCode2 = mismatch(str1, str1+5, str2, strEqual);if (retCode2.first == str1+5 && retCode2.second == str2+5)  {  cout << "str1和str2 完全相同" << endl;  }   else  {  cout << "str1和str2  不相同,首次不匹配的“字符串对”为:("<< str1[retCode2.first - str1] << "," << str2[retCode2.second - str2] << ")" << endl;  }  return 0;}


0 0
原创粉丝点击