vector向量容器
来源:互联网 发布:游戏多开软件 编辑:程序博客网 时间:2024/05/20 04:11
vector容器是数组的一个泛化推广,不仅可以像数组那样进行元素的随机访问,还可以在容器的尾端插入新元素,实现了Random Access Container和Back Insertion Sequence概念。vector具有自动的内存管理功能,对于元素的插入和删除,能够动态调整占用的内存空间。
创建vector对象
有多种方式
(1) vector(constA&a=A())
创建一个空的vector对象,A是内存分配器,此参数可以省略,相当于一个vector()的调用,如:
vector<int> v;
(2) vector(size_type n)
创建一个具有n个元素的vector对象,每个vector元素具有对应类型下的默认值,且n个vector元素的内存空间已被分配,如:
vector<double> v(10);//每个元素的默认值为0.0
(3) vector(size_type n,const T&value)
创建一个具有n个元素的vector对象,每个元素具有初始值valuevector v(10,9.9); vector(const vector&)
通过拷贝一个vector对象的各个元素值,创建一个新的vector对象。如:
vector<char> v1(10,’c’);vector<char> v2(v1)
(5) vector(const InputIterator first, const InputIterator last,const A&a=A())
InputIterator为输入迭代器,通过拷贝迭代区间[first,last),如:
int iArray[]={1,3,5,7,9}; vector<int> v(iArray,iArray+5);
vector初始化
利用vector提供的push_back函数进行vector容器的初始化。如:
vector<int> v;v.push_back(10);
元素的遍历访问
vector的元素可以通过数组或者迭代器的方式进行遍历访问。
利用数组方式访问vector元素:
#include <vector>#include <iostream>using namespace std;int main(){ vector<int> v; v.push_back(1); v.push_back(2); v.push_back(3); v.push_back(4); v.push_back(5); for(int i=0;i<v.size();i++) { cout<<"v["<<i<<"]="<<v[i]<<endl; } return 0;}
vector提供了begin()和end()函数,用于获取首元素的迭代器和最后一个元素的下一位置的迭代器,通过迭代器访问vector元素:
#include<vector>#include<iostream>using namespace std;int main(){ vector<int> v; v.push_back(1); v.push_back(2); v.push_back(3); v.push_back(4); v.push_back(5); vector<int>::iterator begin,end; end=v.end(); int j; for(begin=v.begin(),j=0;begin!=end;begin++,j++) { cout<<"v["<<j<<"]="<<*begin<<endl; } return 0;}
元素的插入
push_back()在vector容器的尾部添加元素,insert函数可以在任意位置插入元素。
#include<iostream>#include<vector>using namespace std;int main(){ vector<int> v; v.push_back(1); v.push_back(2); v.push_back(3); v.push_back(4); v.insert(v.begin()+3,5);//在4的前面插入3 v.insert(v.begin(),6);//插入6为首元素 v.insert(v.end(),7); //插入7为末尾元素 for(int i=0;i<v.size();i++) { cout<<"v["<<i<<"]="<<v[i]<<endl; } return 0;}
元素的删除
erase函数用来删除迭代器pos所指的元素或者迭代器区间[first,last)的所有元素,原型如下:
iterator erase(iterator pos);iterator erase(iterator first,iterator last);
例子:
#include<iostream>#include<vector>using namespace std;class MyAnimal{public: char *name; int age; MyAnimal(char *name,int age) { this->name=name; this->age=age; } ~MyAnimal(){}};int main(){ MyAnimal *pDog=new MyAnimal("dog",1); MyAnimal *pMonkey=new MyAnimal("monkey",2); MyAnimal *pCat=new MyAnimal("cat",3); MyAnimal *pSnake=new MyAnimal("snake",4); vector<MyAnimal *> v;//v存放各个对象的地址 v.push_back(pDog); v.push_back(pMonkey); v.push_back(pCat); v.push_back(pSnake); delete pMonkey;//物理删除pMonkey所指的对象 v.erase(v.beigin()+1);//删除第2个元素 vector<MyAnimal *>::iterator begin,end; end=v.end(); for(begin=v.begin();begin!=end;begin++) { cout<<(*begin)->name<<" "<<(*begin)->age<<endl; } v.clear(); cout<<"执行clear,vector元素全部被清除" return 0;}
元素的反向遍历
利用vector的反向迭代器reverse_itrator以及相应的rbegin和rend函数可以反向遍历vector容器的元素。
#include<iostream>#include<vector>using namespace std;int main(){ vector<int> v; v.push_back(1); v.push_back(2); v.push_back(3); v.push_back(4); v.push_back(5); vector<int>::reverse_iterator rbegin,rend; rend=v.rend(); for(rbegin=v.rbegin();rbegin!=rend;rbegin++) { cout<<*rbegin<<endl; } return 0;}
vector的交换
利用swap算法,实现两个vector容器元素的交换,其原型如下:
void swap(vector &)
例:
#include<iostream>#include<vector>using namespace std;void print(vector<int>& v){ for(int i=0;i<v.size();i++) cout<<v[i]<<" "; cout<<endl;}int main(){ //v1 vector<int> v1; v1.push_back(1); v1.push_back(2); cout<<"-------v1与v2交换前"<<endl; cout<<"v1="; print(v1); //v2 vector<int> v2; v2.push_back(3); v2.push_back(4); v2.push_back(5); v2.push_back(6); cout<<"v2="; print(v2); //v1与v2交换 swap(v1,v2); cout<<"-------v1与v2交换后"<<endl; cout<<"v1="; print(v1); cout<<"v2="; print(v2); return 0;}
其他函数
bool empty()
判断是否为空
size_type size()
实际元素个数
size_type max_size()
系统所允许的vector容器的最大元素个数
size_type capacity()
当前可以容纳的vector元素的个数,reserve函数可以调整数据空间大小
reference front()
容器首元素的引用
reference back()
容器的末尾元素的引用
void pop_back()
与push_back相反,pop_back用于删除末尾的一个元素
- vector 向量容器
- Vector(向量容器)
- vector向量容器
- C++ Vector 向量容器
- vector向量容器
- STL向量容器vector
- vector向量容器
- vector向量容器
- STL vector向量容器
- vector 向量容器
- 向量容器vector模板
- vector向量容器
- vector向量容器
- STL---之vector向量容器
- vector 向量容器基础应用
- STL 向量容器(vector)
- STL 向量容器(vector)
- STL 向量容器(vector)
- 黑马程序员--java技术blog---第四篇:IO流(3)
- 改天记得把自己那个代码中的改成这个boost::lexical_cast
- 汇总一些网络相关的基础概念
- 《Java实战开发经典》第四章4.8
- hdu 1709 求天平不能称重的重量 动态规划
- vector向量容器
- Unicode 和ANSI字符串转换(引用自Windows内核编程(第五版 ))
- 【简单认识】机器学习常见分类算法——朴素贝叶斯
- os模块
- 以后KMP就按照这个方式写了。看了kuangbin的写法
- 深入剖析百度dsp系统底层以及框架
- hdu 5371 Hotaru's problem(manacher+尺取法)
- js测试网速
- LeetCode题解:Palindrome Linked List