//mismatch 和 equal 都是比较两个区间内的元素,各有三个参数first1,last1,first2,
//对于【first1,last1)内所有位置first1+i,first1+i和first2+i所在位置处的元素相等 ,equal 返回true。
参考资料:http://www.2cto.com/kf/201110/107320.html
//对于【first1,last1)内所有位置first1+i,first1+i和first2+i所在位置处的元素相等 ,equal 返回true。
//pair 返回值是由first1 + i 和 first2 + i组成的一个pair,表示第一对不等元素的位置,如果没有找到不相等的元素,则返回last1 和 first2 + (last1 - first1)
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <list>
#include <deque>
#include <vector>
using namespace std;
int main()
{
list <string>driver_list;
vector <string>driver_vec;
deque <string> deq;
driver_list.insert(driver_list.end(),"zhao");
driver_list.insert(driver_list.end(),"bb");
driver_list.insert(driver_list.end(),"cc");
driver_vec.insert(driver_vec.end(),"zhao");
driver_vec.insert(driver_vec.end(),"bb");
driver_vec.insert(driver_vec.end(),"cc"); //当这行被注释掉后,也就是equal第三个参数first2中,数据个数比first1少,那么first2中对迭代器的引用会超出范围
deq.insert(deq.end(),"zhao"); //first1 的长度要《= fisrt2的长度
deq.insert(deq.end(),"bbbbbb");
if (equal(driver_list.begin(),driver_list.end(),driver_vec.begin()))
{
printf("对于【first1,last1)内所有位置first1+i,first1+i和first2+i所在位置处的元素相等\n");
}
//mismatch 返回pair类型,他有两个数据成员,first,last,且它们的类型可以不同
//所以可知 equal(first1,last1,first2) 和 mismatch(first1,last1,first2) .first == last1是等价的
pair <deque <string> ::iterator,list<string>::iterator >pair1 = mismatch(deq.begin(),deq.end(),driver_list.begin());
if(pair1.first != deq.end())
{
cout <<*(pair1.first)<<" and "<<*(pair1.second)<<endl;
}
return 0;
}
mismatch 参数长度要求和equal一样,必须是后边参数长度长。。。
参考资料:http://www.2cto.com/kf/201110/107320.html