stl的几个小实例(zz)

来源:互联网 发布:pdf reader for mac 编辑:程序博客网 时间:2024/05/17 06:24
导读:
  1.遍历打印vector中的元素
  2.insert , erase , clear等的基本用法
  3.介绍模板类(STL基本都是模板类, 了解了这个程序应该会有助于理解STL中的容器)
  4.如何使用命名空间
  5.初始化演示(构造函数另外重载的形式)
  6.一些基本操作
  7.deque的简单用法
  8.list的简单用法(注意这里的merge合并操作)
  9.set的简单用法
  10.map的简单用法
  11.多重映射mulmap
  //1.遍历打印vector中的元素
  #include "stdafx.h"
  #include
  #include
  using namespace std;
  int main(void)
  {
  vector< int >a;
  vector< int >::iterator i;
  a.push_back(1);
  a.push_back(2);
  a.push_back(3);
  a.push_back(4);
  a.push_back(5);
  for(i=a.begin(); i!=a.end(); ++i){
  cout<<(*i)<< endl;
  }
  return 0;
  }
  //2.掌握insert , erase , clear等用法
  #include "stdafx.h"
  #include >  #include
  using namespace std;
  int main(void)
  {
  std::vector< int >q;
  q.push_back(10);
  q.push_back(11);
  q.push_back(12);
  q.push_back(13);
  q.push_back(14);
  vector< int >v;
  for(int i=0; i<5; ++i){
  v.push_back(i);
  }
  vector< int >::iterator it = v.begin() + 1;
  //每次打印5个数,看看为什么是这些数
  //insert的基本用法
  for (it=v.begin(); it!=v.end(); it++)
  cout<<(*it)<< endl;
  printf("**************/n");
  it = v.insert(it, 33);
  for (it=v.begin()+1; it!=v.end(); it++)
  cout<<(*it)<< endl;
  printf("**************/n");
  v.insert(it, q.begin()+2, q.end()-1);
  for (it=v.begin()+3; it!=v.end(); it++)
  cout<<(*it)<< endl;
  printf("**************/n");
  v.insert(it, 2, 5);
  for (it=v.begin()+5; it!=v.end(); it++)
  cout<<(*it)<< endl;
  printf("**************/n");
  //erase的基本用法
  it = v.begin()+2;
  v.erase(it);
  for (it=v.begin(); it!=v.end()-4; it++)
  cout<<(*it)<< endl;
  printf("**************/n");
  it = v.begin();
  v.erase(it, it + 2);
  for (it=v.begin(); it!=v.end()-2; it++)
  cout<<(*it)<< endl;
  printf("**************/n");
  //clear
  v.clear();
  for (it=v.begin(); it!=v.end(); it++)
  cout<<(*it)<< endl;
  printf("**************/n");
  return 0;
  }
  //3.介绍模板类
  #include "stdafx.h"
  #include< iostream.h >
  //定义名为ex_class的类模板
  template clas* **_class
  {
  T value;
  public:
  ex_class(T v) { value=v; }
  void set_value(T v) { value=v; }
  T get_value(void) {return value;}
  };
  //main()函数中测试ex_class类模板
  int main(void)
  {
  //测试int类型数据
  ex_class a(5),b(10);
  cout<< "a.value:"<< a.get_value()<< endl;
  cout<< "b.value:"<< b.get_value()<< endl;
  //测试char类型数据
  ex_class ch(?A?);>  cout<< "ch.value:"<< ch.get_value()<< endl;
  ch.set_value('a');
  cout<< "ch.value:"<< ch.get_value()<< endl;
  //测试double类型数据
  ex_class x(5.5);>  cout<< "x.value:"<< x.get_value()<< endl;
  x.set_value(7.5);
  cout<< "x.value:"<< x.get_value()<< endl;
  return 0;
  }
  //4.如何使用名字空间
  #include "stdafx.h"
  #include >  using namespace std;
  namespace printA
  {
  print() {cout<< "using namespace printA….."<< endl; };
  }
  namespace printB
  {
  print() {cout<< "using namespace printB….."<< endl; };
  }
  int main(void)
  {
  printA::print(); //测试命名空间printA, ::是作用域解析运算符
  printB::print();
  return 0;
  }
  //5.构造函数另外重载的形式
  #include >  #include
  #include
  using namespace std;
  int ar[10] = { 12, 45, 234, 64, 12, 35, 63, 23, 12, 55 };
  char* str = "Hello World";
  int main(void)
  {
  vector vec1(ar, ar+10); //first=ar,last=ar+10,不包括ar+10
  vector vec2(str, str+strlen(str)); //first=str,last= str+strlen(str),不包括最后一个
  cout<< "vec1:"<< endl;
  //打印vec1和vec2,const_iterator是迭代器,后面会讲到
  //当然,也可以用for (int i=0; i< vec1.size(); i++)cout << vec[i];输出
  //size()是vector的一个成员函数
  for(vector />::const_iterator
  cout<<*p;
  cout<< '/n'<< "vec2:"<< endl;
  for(vector />::const_iterator
  cout<< *p1;
  getchar();
  return 0;
  }
  //6.一些基本操作
  #include "stdafx.h"
  #include >  #include
  using namespace std;
  typedef vector< int >INTVECTOR;//自定义类型INTVECTOR
  //测试vector容器的功能
  void main(void)
  {
  //vec1对象初始为空
  INTVECTOR vec1;
  //vec2对象最初有10个值为6的元素
  INTVECTOR vec2(10,6);
  //vec3对象最初有3个值为6的元素,拷贝构造
  INTVECTOR vec3(vec2.begin(),vec2.begin()+3);
  //声明一个名为i的双向迭代器
  INTVECTOR::iterator i;
  //从前向后显示vec1中的数据
  cout<< "vec1.begin()--vec1.end():"<< endl;
  for (i =vec1.begin(); i !=vec1.end(); ++i)
  cout<< *i <<" ";
  cout <  //从前向后显示vec2中的数据
  cout<< "vec2.begin()--vec2.end():"<< endl;
  for (i =vec2.begin(); i !=vec2.end(); ++i)
  cout <<*i <<" ";
  cout<< endl;
  //从前向后显示vec3中的数据
  cout<< "vec3.begin()--vec3.end():"<< endl;
  for (i =vec3.begin(); i !=vec3.end(); ++i)
  cout <<*i <<" ";
  cout <  //测试添加和插入成员函数,vector不支持从前插入
  vec1.push_back(2);//从后面添加一个成员
  vec1.push_back(4);
  vec1.insert(vec1.begin()+1,5);//在vec1第一个的位置上插入成员5
  //从vec1第一的位置开始插入vec3的所有成员
  vec1.insert(vec1.begin()+1,vec3.begin(),vec3.end());
  cout<< "after push() and insert() now the vec1 is:" <  for (i =vec1.begin(); i !=vec1.end(); ++i)
  cout <<*i <<" ";
  cout <  //测试赋值成员函数
  vec2.assign(8,1); // 重新给vec2赋值,8个成员的初始值都为1
  cout<< "vec2.assign(8,1):" <  for (i =vec2.begin(); i !=vec2.end(); ++i)
  cout <<*i <<" ";
  cout <  //测试引用类函数
  cout<< "vec1.front()="<< vec1.front()<< endl;//vec1第零个成员
  cout<< "vec1.back()="<< vec1.back()<< endl;//vec1的最后一个成员
  cout<< "vec1.at(4)="<< vec1.at(4)<< endl;//vec1的第五个成员
  cout<< "vec1[4]="<< vec1[4]<< endl;
  //测试移出和删除
  vec1.pop_back();//将最后一个成员移出vec1
  vec1.erase(vec1.begin()+1,vec1.end()-2);//删除成员
  cout<< "vec1.pop_back() and vec1.erase():" <  for (i =vec1.begin(); i !=vec1.end(); ++i)
  cout <<*i <<" ";
  cout <  //显示序列的状态信息
  cout<< "vec1.size(): "<< vec1.size()<< endl;//打印成员个数
  cout<< "vec1.empty(): "<< vec1.empty()<< endl;//清空
  }
  //7.deque的简单用法
  #include "stdafx.h"
  #include >  #include
  using namespace std;
  typedef deque< int >INTDEQUE;//有些人很讨厌这种定义法,呵呵
  //从前向后显示deque队列的全部元素
  void put_deque(INTDEQUE deque, char *name)
  {
  INTDEQUE::iterator pdeque;//仍然使用迭代器输出
  cout <<"The contents of " <  cout<  }
  //测试deqtor容器的功能
  void main(void)
  {
  //deq1对象初始为空
  INTDEQUE deq1;
  //deq2对象最初有10个值为6的元素
  INTDEQUE deq2(10,6);
  //声明一个名为i的双向迭代器变量
  INTDEQUE::iterator i;
  //从前向后显示deq1中的数据
  put_deque(deq1,"deq1");
  //从前向后显示deq2中的数据
  put_deque(deq2,"deq2");
  //从deq1序列后面添加两个元素
  deq1.push_back(2);
  deq1.push_back(4);
  cout<< "deq1.push_back(2) and deq1.push_back(4):"<< endl;
  put_deque(deq1,"deq1");
  //从deq1序列前面添加两个元素
  deq1.push_front(5);
  deq1.push_front(7);
  cout<< "deq1.push_front(5) and deq1.push_front(7):"<< endl;
  put_deque(deq1,"deq1");
  //在deq1序列中间插入数据
  deq1.insert(deq1.begin()+1,3,9);
  cout<< "deq1.insert(deq1.begin()+1,3,9):"<< endl;
  put_deque(deq1,"deq1");
  //测试引用类函数
  cout<< "deq1.at(4)="<< deq1.at(4)<< endl;
  cout<< "deq1[4]="<< deq1[4]<< endl;
  deq1.at(1)=10;
  deq1[2]=12;
  cout<< "deq1.at(1)=10 and deq1[2]=12 :"<< endl;
  put_deque(deq1,"deq1");
  //从deq1序列的前后各移去一个元素
  deq1.pop_front();
  deq1.pop_back();
  cout<< "deq1.pop_front() and deq1.pop_back():"<< endl;
  put_deque(deq1,"deq1");
  //清除deq1中的第2个元素
  deq1.erase(deq1.begin()+1);
  cout<< "deq1.erase(deq1.begin()+1):"<< endl;
  put_deque(deq1,"deq1");
  //对deq2赋值并显示
  deq2.assign(8,1);
  cout<< "deq2.assign(8,1):"<< endl;
  put_deque(deq2,"deq2");
  }
  //8.list的简单用法(注意这里的merge合并操作)
  #include "stdafx.h"
  #include >  #include
  #include
  using namespace std;
  void PrintIt(list< int >n)
  {
  for(list< int >::iterator iter=n.begin(); iter!=n.end(); ++iter)
  cout<< *iter<< " ";//用迭代器进行输出循环
  }
  int main(void)
  {
  list< int >listn1,listn2;
  //给listn1,listn2初始化
  listn1.push_back(123);
  listn1.push_back(0);
  listn1.push_back(34);
  listn1.push_back(1123);
  //now listn1:123,0,34,1123
  listn2.push_back(100);
  listn2.push_back(12);
  //now listn2:12,100
  listn1.sort();
  listn2.sort();
  //给listn1和listn2排序
  //now listn1:0,34,123,1123 listn2:12,100
  PrintIt(listn1);
  cout<< endl;
  PrintIt(listn2);
  listn1.merge(listn2);
  //合并两个排序列表后,listn1:0,12,34,100,123,1123
  //注意这里的merge,
  //如果没有给listn1和listn2排序,那么上面的输出结果是100,12,123,0,34,1123
  //如果只给listn1排序,那么结果是0,34,100,12,123,1123
  //如果只给listn2排序,那么结果是12,100,123,0,34,1123
  //如果把上面那句换个位置,换成listn2.merge(listn1),然后下面输出listn2,其各种排序情况下的结果都不变
  cout<< endl;
  PrintIt(listn1);
  return 0;
  }
  //9.set的简单用法
  #include "stdafx.h"
  #include >  #include
  using namespace std;
  int main(void)
  {
  set< int >set1;
  set1.insert(1);
  set1.insert(3);
  set1.insert(17);
  set1.insert(7);
  set1.insert(20);
  set1.insert(10);
  for(set< int >::iterator p=set1.begin();p!=set1.end();++p)
  cout<< *p<< " ";
  //set会给插入的值自动排序
  if(set1.insert(15).second)//插入的值如果已经有了就会插入失败(比如set1.insert(17)),没有才会成功,
  //插入成功则set1.insert(15).second返回1,否则返回0
  {
  cout<< "set insert success";
  cout<< endl;
  for(p=set1.begin();p!=set1.end();++p)
  cout<< *p<< " ";
  }
  else
  cout<< "set insert failed";
  /*下面这段在vc6下面编译不过去,原因还不知道,但是vc7下面可以,请高手指教
  int a[] = {4, 1, 1, 1, 1, 1, 0, 5, 1, 0};
  multiset< int >A;
  A.insert(set1.begin(),set1.end());
  A.insert(a,a+10);
  cout<< endl;
  for(multiset< int >::iterator p2=A.begin();p2!=A.end();++p2)
  cout<< *p2<< " "; */
  return 0;
  }
  //10.map的简单用法
  #include "stdafx.h"
  #include >  #include
  using namespace std;
  int main(void)
  {
  map< char,int,greater< char >>map1;//缺省是按less排序
  map< char,int,greater< char >>::iterator mapIter;
  //char 是键的类型,int是值的类型
  //下面是初始化,与数组类似
  //也可以用map1.insert(map< char,int,greater< char >>::value_type('c',3));
  map1['c']=3;
  map1['d']=4;
  map1['a']=1;
  map1['b']=2;
  for(mapIter=map1.begin();mapIter!=map1.end();++mapIter)
  cout<< " "<< (*mapIter).first<< ": "<< (*mapIter).second;
  //first对应定义中的char键,second对应定义中的int值
  //检索对应于d键的值是这样做的:
  map< char,int,greater< char >>::const_iterator ptr;
  ptr=map1.find('d');//find只能找键,不能找值?????
  cout<< '/n'<< " "<< (*ptr).first<< " 键对应于值:"<< (*ptr).second;
  return 0;
  }
  //11.多重映射mulmap
  #include "stdafx.h"
  #include >  #include
  #include
  using namespace std;
  int main(void)
  {
  multimap< string,string,greater< string >>mulmap;
  multimap< string,string,greater< string >>::iterator p;
  //初始化多重映射mulmap:
  typedef multimap< string,string,less< string >>::value_type vt;
  typedef string s;
  mulmap.insert(vt(s("Tom "),s("is a student")));
  mulmap.insert(vt(s("Tom "),s("is a boy")));
  mulmap.insert(vt(s("Tom "),s("is a bad boy of blue!")));
  mulmap.insert(vt(s("Jerry "),s("is a student")));
  mulmap.insert(vt(s("Jerry "),s("is a beatutiful girl")));
  mulmap.insert(vt(s("DJ "),s("is a student")));
  //输出初始化以后的多重映射mulmap:
  for(p=mulmap.begin();p!=mulmap.end();++p)
  cout<< (*p).first<< (*p).second<< endl;
  //检索并输出Jerry键所对应的所有的值
  cout<< "find Jerry :"<< endl;
  p=mulmap.find(s("Jerry "));
  while((*p).first=="Jerry ")
  {
  cout<< (*p).first<< (*p).second<< endl;
  ++p;
  }
  return 0;
  }

::const_iterator>
::const_iterator>
原创粉丝点击