C++ STL之vector容器的基本操作
时间:2022-04-26
本文章向大家介绍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 }
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- thinkPHP和onethink微信支付插件分享
- PHP各种常见经典算法总结【排序、查找、翻转等】
- php字符串截取函数mb_substr用法实例分析
- PHP利用DWZ.CN服务生成短网址
- php精度计算的问题解析
- PHP使用Session实现上传进度功能详解
- php常用字符串查找函数strstr()与strpos()实例分析
- php 根据URL下载远程图片、压缩包、pdf等文件到本地
- PHP使用HTML5 FormData对象提交表单操作示例
- python接入支付宝的实例操作
- php实现网页上一页下一页翻页过程详解
- Yii 使用intervention/image拓展实现图像处理功能
- PHP常用的类封装小结【4个工具类】
- 微信公众号之主动给用户发送消息功能
- laravel异步监控定时调度器实例详解