通过这个代码可以大致的了解序列容器的一些通用的功能 也可以接触到普通的 iterator 和 reverse_iterator 也用到了模版 是个不错的例子 就是长了点 打了一天的字 又来打代码 真是一种磨练。。。。
#include<iostream>
#include<deque>
#include<list>
#include<vector>
using namespace std;
template<typename Container>
void print(Container &c,char * title =" ")
{
cout<<title<<':'<<endl;
if(c.empty())
{
cout<<"empty"<<endl;
return ;
}
typename Container::iterator it;
for(it=c.begin();it!=c.end();it++)
cout<<*it<<" ";
cout<<endl;
cout<<"size() "<<c.size()<<" "
<<"max_size() "<<c.max_size()<<" "
<<"front() "<<c.front()<<" "
<<"back() "<<c.back()<<" "
<<endl;
}
template<typename Containerofint>
void basicops(char *s)
{
cout<<"------------"<<s<<"-------------"<<endl;
typedef Containerofint Ci;
Ci c;
print(c,"c after default constructor");
Ci c2(10,1);
print(c2,"c2 after constructor(10,1)");
int ai[]={1,3,5,7,9};
const int size=sizeof(ai)/sizeof(ai[0]);
Ci c3(ai,ai+size);
print(c3,"c3 after comstruction(iter,iter)");
Ci c4(c2);
print(c4,"c4 after constructor(c2)");
c=c2;
print(c,"c after constructor(c2)");
c.assign(10,2);
print(c,"c after c.assign(10,2)");
cout<<"c using reverse iterator: "<<endl;
typename Ci::reverse_iterator rit=c.rbegin();
while(rit!=c.rend())
cout<<*rit++<<" ";
cout<<endl;
c.resize(4);
print(c,"c after resize(4)");
c.push_back(47);
print(c,"c after push_back(47)");
c.pop_back();
print(c,"c after pop_back()");
typename Ci::iterator it=c.begin();
++it;
++it;
c.insert(it,74);
print(c,"c after insert(it,74)");
it=c.begin();
++it;
c.insert(it,3,96);
print(c,"c after insert(it,3,96)");
it=c.begin();
++it;
c.insert(it,c3.begin(),c3.end());
print(c,"c after insert(it,c3.begin(),c3.end())");
it=c.begin();
++it;
c.erase(it);
print(c,"c after erace(it)");
typename Ci::iterator it2=it=c.begin();
++it;
++it2;
++it2;
++it2;
++it2;
++it2;
c.erase(it,it2);
print(c,"c after erase(it,it2)");
c.swap(c2);
print(c,"c after swap(c2)");
c.clear();
print(c,"c after clear()");
}
int main()
{
basicops<vector<int> >("vector");
basicops<deque<int> >("deque");
basicops<list<int> >("list");
return 0;
}