vectour向量容器的基本使用
来源:互联网 发布:电力造价软件 编辑:程序博客网 时间:2024/06/08 06:39
作为数组的一个泛化推广的vector容器,不仅可以进行数组一样的元素随机访问,还可以在容器的尾端插入新元素,是一个实现了Random Access Container 和Back Insertion Sequence概念的模型。
vector容器是一个线性的结构,用M_start、M_finish、M_end_of_storage分别指向存放向量的起始字节位置、当前最后一个向量元素的末尾字节位置和整个容器所占有的内存空间的末尾字节。
vector提供的push_back函数,常用来进行vector容器的初始化。push_back函数在容器的尾端插入新元素value。
vector的元素访问可以采用数组或迭代器的方式进行遍历访问。代码如下:
//数组的方式访问vector元素#include<iostream>#include<vector>using namespace std;int main(void){ vector<int> v; v.push_back(1); v.push_back(2); v.push_back(3); for(int i = 0;i<v.size();i++) { cout<<"v["<<i<<"]="<<v[i]<<endl; }<pre name="code" class="cpp"> getchar();return 0;}
//迭代器的方式访问vector元素#include<iostream>#include<vector>using namespace std;int main(void){ vector<int> v; v.push_back(1); v.push_back(2); v.push_back(3); vector<int>::iterator i,iend; iend = v.end(); int j = 0; for(i = v.begin();i != iend;i++,j++) { cout<<"v["<<j<<"]="<<*i<<endl; }<pre name="code" class="cpp"> getchar();return 0;}
元素的插入:
vector可以用push_back将元素添加至容器的尾端,也可以使用insert将元素添加至指定的位置。由于插入需要将插入位置之后的元素往后移动,所以insert比push_back更耗时。
//vector中插入元素#include<iostream>#include<vector>using namespace std;int main(void){ vector<int> v; v.push_back(1); v.push_back(2); v.push_back(3); v.push_back(5); v.insert(v.begin()+3,4);//在3后面添加4 v.insert(v.begin(),0);//在1前面添加0 v.insert(v.end(),6);//在5后面插入6 for(int i = 0;i<v.size();i++) { cout<<"v["<<i<<"]="<<v[i]<<endl; }<pre name="code" class="cpp"> getchar(); return 0;}
元素的删除:
vector提供了一个erase函数,用来删除迭代器pos所指的元素或是迭代器区间[first,last)的所有元素,它的原型如下:
(1) iterator erase(iterator pos)
(2) iterator erase(iterator first,iterator last)
另外还可以调用vector的void clear()函数,它调用了erase函数,将[begin(),end())间的元素全部删除掉。
//删除vector元素#include<iostream>#include<vector>using namespace std;void print(vector<int>& v);int main(void){ vector<int> v; v.push_back(1); v.push_back(2); v.push_back(3); v.push_back(5); v.insert(v.begin()+3,4);//在3后面添加4 v.insert(v.begin(),0);//在1前面添加0 v.insert(v.end(),6);//在5后面插入6 print(v); v.erase(v.begin());//删除第一个元素0 cout<<"删除第一个元素0:"<<endl; print(v); v.erase(v.begin()+4,v.end());//删除第5和第6个元素5,6 cout<<"删除第5和第6个元素5,6:"<<endl; print(v); v.clear();//清除所有元素 cout<<"清除所有元素:"<<endl; print(v); getchar(); return 0;}void print(vector<int>& v){for(int i = 0;i<v.size();i++) { cout<<"v["<<i<<"]="<<v[i]<<endl; }}
元素的反向遍历:
利用vector提供的反向迭代器reverse_iterator,以及相应的rbegin()和rend()函数,可以反向遍历
vector容器的元素。rbegin函数返回的迭代器指向反向遍历的首元素,rend函数返回的迭代器指向反向遍历的结束元素。
//反向遍历vector元素#include<iostream>#include<vector>using namespace std;void print(vector<int>& v);int main(void){ vector<int> v; v.push_back(1); v.push_back(2); v.push_back(3); v.push_back(5); v.insert(v.begin()+3,4);//在3后面添加4 v.insert(v.begin(),0);//在1前面添加0 v.insert(v.end(),6);//在5后面插入6 print(v); vector<int>::reverse_iterator ri,riend; riend = v.rend(); for(ri = v.rbegin();ri != riend;ri++) cout<<*ri<<endl; getchar(); return 0;}void print(vector<int>& v){for(int i = 0;i<v.size();i++) { cout<<"v["<<i<<"]="<<v[i]<<endl; }}
两个vector元素的交换:
可以使用swap算法,实现交换两个vector容器元素。
#include<iostream>#include<vector>using namespace std;void print(vector<int>& v);int main(void){ vector<int> v1,v2; v1.push_back(1); v1.push_back(2); v1.push_back(3); v1.push_back(4); v1.push_back(5); v2.push_back(6);v2.push_back(7);v2.push_back(8);v2.push_back(9);v2.push_back(10);cout<<"交换前:"<<endl;cout<<"v1:"<<endl; print(v1);cout<<"v2:"<<endl;print(v2);swap(v1,v2);cout<<"交换后:"<<endl;cout<<"v1:"<<endl;print(v1);cout<<"v2:"<<endl;print(v2);getchar(); return 0;}void print(vector<int>& v){for(int i = 0;i<v.size();i++) { cout<<"v["<<i<<"]="<<v[i]<<endl; }}
其他的常用函数:
- bool empty() 判断容器是否为空。若容器为空返回true,否则返回false。
- size_type size() 当前容器的实际元素个数。
- size_type max_size() 系统所允许的vector容器最大元素个数。
- size_type capacity() 当前可容纳的vector元素个数。
- reference front() vector容器的首元素(引用),要求vector不为空。
- reference back() vector容器的末元素(引用),要求vector不为空。
- void pop_back() 与push_back相反,在末尾删除一个元素。
- vectour向量容器的基本使用
- 向量容器的使用
- vector向量容器的一些基本操作
- C++向量容器vector的使用
- STL基本容器的使用
- STL基本容器的使用
- Docker容器的基本使用
- 【转】vector向量容器 基本操作
- vector向量容器的删除
- 向量的基本运算
- C++ STL 容器、迭代器、适配器,基本容器的使用
- C++ STL基本容器的使用
- c++中容器的基本使用
- C++ STL基本容器的使用
- C++ STL基本容器的使用
- C++ STL基本容器的使用
- C++ STL基本容器的使用
- C++ STL基本容器的使用
- Docker源码分析(一):Docker架构
- 【边做项目边学Android】手机安全卫士03:获取更新的服务器配置,显示更新对话框
- Android APK 反编译详解(附图)
- Windows 2003全面优化
- Hadoop ecosystem自己的理解
- vectour向量容器的基本使用
- 全自动软化水设备:全自动软化水设备工作原理分析
- 【iOS开发-21】UINavigationController导航控制器初始化,导航控制器栈的push和pop跳转理解
- 全自动软化水设备:全自动软化水设备自身优化能力简介
- 微信、陌陌的架构方案分析(LBS之二)
- angularJS, ng-click阻止冒泡
- Linux Bash严重漏洞修复
- WM_CHAR
- 我不是运维(1)