#include <stdio.h>
#include <string>
#include <iostream>
#include <vector>
#include <list>
#include <algorithm>
using namespace std;
//通过定义模板函数来使用迭代器打印容器中的元素
template<typename container>
void PrintContainers(const container &con)
{
typename container::const_iterator it=con.begin();
//因为参数为const 所以这里的迭代器也要用const_iterator
while(it!=con.end())
{
cout<<*it<<" ";
it++;
}
cout<<endl;
}
//通过定义模板函数反向打印容器中的元素(使用反向迭代器)
template<typename container>
void ReversePrintContainers( const container & con )
{
typename container::const_reverse_iterator it=con.rbegin();
while(it!=con.rend())
{
cout<<*it<<" ";
it++;
}
cout<<endl;
}
struct my_sort //自定义比较函数my_sort()降序排列
{
bool operator()(int i,int j)
{
return i>j;
}
};
void vector_test()//对容器vector进行测试
{
vector<int> v1;//定义存放int类型的vector容器,依次存放元素2,5,3,1,4
v1.push_back(2);
v1.push_back(5);
v1.push_back(3);
v1.push_back(1);
v1.push_back(4);
PrintContainers(v1);//按顺序打印
ReversePrintContainers(v1);//反向打印
sort(v1.begin(),v1.end());//对容器中的元素进行排序,使用sort函数
PrintContainers(v1);
sort(v1.begin(),v1.end(),my_sort());//对顺序表进行自定义排序,使用仿函数
PrintContainers(v1);
vector<int>::iterator pos=find(v1.begin(),v1.end(),1);//返回在容器中元素值为1的迭代器
cout<<"在1之前插入7"<<endl;
v1.insert(pos,7);
PrintContainers(v1);
}
void list_test() //对列表进行相关的测试
{
list<string> L;
L.push_back("a");
L.push_back("b");
L.push_back("c");
L.push_back("d");
L.push_back("e");
L.push_back("f");
PrintContainers(L);//顺序打印列表L
ReversePrintContainers(L);//反向打印列表L
list<string>::iterator pos2=find(L.begin(),L.end(),"b");
printf("在元素b之前插入gg\n");
L.insert(pos2,"gg");
PrintContainers(L);
}
int main()
{
vector_test();
list_test();
system("pause");
return 0;
}
本例子使用模板函数使用迭代器遍历容器(vector,list,)
使用sort函数进行排序;自定义my_sort()函数,使用仿函数进行逆向排序