#include <iostream>
#include <algorithm>
#include <iterator>
#include <string>
#include <vector>
#include <functional>
using namespace std;
template <class T>
struct display{
void operator()(const T& x){
cout<<x<<" ";
}
};
int main(){
int a[9] = {0,1,2,3,4,5,6,7,8};
vector<int> v1(a,a + 5);
vector<int> v2(a,a + 9);
pair<vector<int>::iterator,vector<int>::iterator> result;
result = mismatch(v1.begin(),v1.end(),v2.begin());
if(result.first == v1.end())
cout<<"The two ranges do not differ!"
<<endl;
else
cout<<"The difference of two ranges is "
<<*(result.second)
<<endl;
//区间内全部填9
fill(v1.begin(),v1.end(),9);
for_each(v1.begin(),v1.end(),display<int>());//9 9 9 9 9
cout<<endl;
fill_n(v1.begin(),3,7);//注意3为v1的前三位用7覆盖,这个值应该小于5, 也就是v.size()
for_each(v1.begin(),v1.end(),display<int>());//7 7 7 9 9
cout<<endl;
vector<int>::iterator it1 = v1.begin();
vector<int>::iterator it2 = it1;
advance(it2,3);
iter_swap(it1,it2);
cout<<*it1<<" "<<*it2<<endl;//9 7
for_each(v1.begin(),v1.end(),display<int>());//9 7 7 7 9
cout<<endl;
cout<<max(*it1,*it2)<<endl;//9
cout<<min(*it1,*it2)<<endl;//7
//下面计算的是迭代器本身大小,这是没有意义的
cout<<*max(it1,it2)<<endl;//7
cout<<*min(it1,it2)<<endl;//9
swap(*v1.begin(),*v2.begin());
for_each(v1.begin(),v1.end(),display<int>());//0 7 7 7 9
cout<<endl;
for_each(v2.begin(),v2.end(),display<int>());//9 1 2 3 4 5 6 7 8
cout<<endl;
修改v2以后,在进行比较
//vector<int>::iterator p = v2.begin();
//v2.insert(p+3,9);
//pair<vector<int>::iterator,vector<int>::iterator> result2;
//result2 = mismatch(v1.begin(),v1.end(),v2.begin());
//if(result2.first == v1.end())
// cout<<"The two ranges do not differ!"
// <<endl;
//else
// cout<<"The difference of two ranges is "
// <<*(result2.second)
// <<endl;
string str1[] = {"Jamie","JJHou","Jason"};
string str2[] = {"Jamie","JJhou","Jerry"};
cout<<lexicographical_compare(str1,str1+2,str2,str2+2)<<endl;//1
cout<<lexicographical_compare(str1,str1+2,str2,str2+2,greater<string>())<<endl;//0
}