zoukankan      html  css  js  c++  java
  • C++ STL之vector容器的基本操作

    注意事项:
    特别注意任何时候同时使用两个迭代器产生的将会是一个前闭后开的区间(具体见插入和删除的例子)
    特别注意begin()指向的是vec中的第0个元素,而end是指向最后一个元素的后面一个位置(不是最后一个元素)
    特别注意迭代器的时效性,如果一个迭代器所指向的内容已经被删除,而后又使用该迭代器的话,会造成意想不到的后果

      1 //容器的基本操作
      2 //特别注意任何时候同时使用两个迭代器产生的将会是一个前闭后开的区间(具体见插入和删除的例子)
      3 //特别注意begin()指向的是vec中的第0个元素,而end是指向最后一个元素的后面一个位置(不是最后一个元素)
      4 //特别注意迭代器的时效性,如果一个迭代器所指向的内容已经被删除,而后又使用该迭代器的话,会造成意想不到的后果
      5 #include<iostream>
      6 #include<vector>
      7 #include<algorithm>
      8 using namespace std;
      9 void print(vector<int> vec)
     10 {
     11     for(int i=0;i<vec.size();i++)
     12     {
     13         cout<<vec[i]<<" ";
     14     }
     15     cout<<endl;
     16 }
     17 
     18 int main()
     19 {
     20     //初始化,一般序列式容器初始化容量、内容,关联式容器初始化比较方法
     21     int num[10]={0,1,2,3,4,5,6,7,8,9};
     22     vector <int> vec(num,num+10);
     23     print(vec);
     24 
     25     //增加元素insert(要使用迭代器,在迭代器的指定位置插入数据,注意与string区分)、push
     26     //特别注意如果使用两个迭代器产生的将会是一个前闭后开的区间
     27     vector<int>::iterator iter_int;
     28     //在第二个元素(vec[1])的位置上插入99
     29     iter_int=vec.begin()+1;
     30     vec.insert(iter_int,99);
     31     cout<<"在第二个元素(vec[1])的位置上插入99"<<endl;
     32     print(vec);
     33     //在第三个元素(vec[2])的位置上插入3个100
     34     iter_int=vec.begin()+2;
     35     vec.insert(iter_int,3,100);
     36     cout<<"在第三个元素(vec[1])的位置上插入三个100"<<endl;
     37     print(vec);
     38     vector<int>temp(num,num+10);
     39     cout<<"temp:"<<endl;
     40     print(temp);
     41     vector<int>::iterator t1=temp.begin()+1;
     42     vector<int>::iterator t2=temp.begin()+3;
     43     vec.insert(vec.begin(),t1,t2);
     44     cout<<"在第1个元素(vec[0])的位置上插入temp的[1,3)后的vec:";
     45     print(vec);
     46 
     47     cout<<"push插入操作"<<endl;
     48     vec.push_back(100);
     49     print(vec);
     50 
     51     //删除元素erase、clear(全删除)
     52     //特别注意如果使用两个迭代器产生的将会是一个前闭后开的区间
     53     iter_int=vec.begin();
     54     vec.erase(iter_int,iter_int+5);
     55     cout<<"删除操作,删除[0,5)区间的内容"<<endl;
     56     print(vec);
     57 
     58     //查找操作(序列式容器没有查找操作,只有关联式容器采用)
     59     
     60     //修改元素,修改元素先查找要修改的元素,如果查找返回引用则直接对引用进行修改,如果返回的是迭代器,需要使用迭代器的方法修改元素的值
     61     cout<<"修改元素操作"<<endl;
     62     vec[0]=8;//[]返回的是引用,所以直接操作
     63     print(vec);
     64     iter_int=vec.begin();
     65     *iter_int=9;//迭代器需要使用迭代器的方法修改元素的值
     66     print(vec);
     67 
     68     //和指定容器交换元素swap
     69     cout<<"交换内容"<<endl;
     70     vector <int> vec1(num,num+10);
     71     cout<<"交换前的元素vec:";
     72     print(vec);
     73     cout<<"交换前的元素vec1:";
     74     print(vec1);
     75     vec1.swap(vec);
     76     cout<<"交换后的元素vec:";
     77     print(vec);
     78     cout<<"交换后的元素vec1:";
     79     print(vec1);
     80 
     81     //容器之间可以比较,与string的比较一样
     82     if(vec>vec1)
     83     {
     84         cout<<"vec>vec1"<<endl;
     85     }
     86     else
     87     {
     88         cout<<"vec<=vec1"<<endl;
     89     }
     90 
     91     //排序
     92     cout<<"对vec1排序"<<endl;
     93     iter_int=vec1.begin();
     94     sort(iter_int,iter_int+vec1.size());
     95     print(vec1);
     96 
     97     //begin() end()
     98     //要特别注意begin()指向的是vec中的第0个元素,而end是指向最后一个元素的后面一个位置(不是最后一个元素)
     99     cout<<"begin and end"<<endl;
    100     iter_int=vec1.begin();
    101     cout<<*iter_int<<endl;
    102     iter_int=vec1.end()-1;//如果写成这样就错了iter_int=vec1.end();
    103     cout<<*iter_int<<endl;
    104     return 0;
    105 }

  • 相关阅读:
    Android视图动画集合AndoridViewAnimations
    调整窗口大小时进行页面刷新(设定定时器)
    通过拖动来变换元素顺序
    jquery的input:type=file实现文件上传
    ajax请求的data数据格式
    Cookie的新增,设置与清除
    比较两个对象是否一样的代码
    5.3日,7:20开始 阮一峰js的早课学习
    在线代码编辑器使用案例代码
    layui当点击增加的时候,将form中的值获取的添加到table行中代码
  • 原文地址:https://www.cnblogs.com/bewolf/p/4418653.html
Copyright © 2011-2022 走看看