• 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 }

  • 相关阅读:
    js 或者 element-ui 将年月日时分秒转换为时间戳
    element-ui 设置table 表头多列显示
    element-ui table 给表头添加icon,以及hover上去的提示文字
    js 获取本周开始结束时间,本月开始结束时间等....
    element-ui Table 翻页后记忆之前勾选
    element-ui 上传图片或视频时,先回显在上传
    element-ui Upload 上传获取当前选择的视频时长
    element-ui 自定义 Upload 上传进度条
    Sqoop(二)常用命令及常数解析
    使用IDEA构建Spring Boot项目简单实例
  • 原文地址:https://www.cnblogs.com/bewolf/p/4418653.html
Copyright © 2020-2023  润新知