vector向量容器
来源:互联网 发布:stussy 正品淘宝 编辑:程序博客网 时间:2024/06/06 03:29
Vector向量容器不但能像数组一样对元素进行随机访问,还能在尾部插入元素,是一种简单,高效的容器,完全可以代替数组。
Vector容器的下标是从0开始的。对于Vector容器的容量定义,可以事先定义一个固定大小,事后,可以随时调整其大小;也可以事先不定义,随时使用push_back()方法从尾部扩张元素,也可以使用insert()在某个位置前插入新元素。
Vector有两个重要的方法,begin()和end(),begin()返回的是首元素位置的迭代器,end()返回的是最后一个元素的下一个元素位置的迭代器。
1.创建Vector对象
创建Vector对象常用的有三种方式。
(1)不指定容器的元素个数,如定义一个用来存储整型的容器:
vector<int> v;
(2)创建时指定容器的大小,如定义一个用来存储10个double类型元素的向量容器:
vector<double> v(10);
(3)创建一个具有n个元素的向量容器对象,每个元素具有指定的初始值:
vector<double> v(10,8.6);上述语句定义了v向量容器,共有10个元素,每个元素的值都是8.6。
2.尾部元素扩张
通常使用push_back()对vector容器在尾部追加新元素。追加新元素时,vector容器会自动分配新内存空间。可对空的vector对象扩张,也可以对已有元素的vector对象扩张,如:
#include<iostream>#include<vector>using namespace std;int main(){vector<int> v;v.push_back(5);v.push_back(2);v.push_back(3);return 0;}
3.下标方式访问vector元素
访问或者遍历vector对象是常要做的事。对于vector对象,可以采用下标方式随意访问它的某个元素,当然,也可以以下标方式对莫元素重新赋值,这点类似于数组的下标访问方式,如:
#include<iostream>#include<vector>using namespace std;int main(){vector<int> v(3); v[0]=5; v[1]=2; v[2]=3; cout<<v[0]<<" "<<v[1]<<" "<<v[2]<<endl;return 0;}
常使用迭代器配合循环语句来对vector对象进行遍历,迭代器的类型一定要与它遍历的vector对象的元素类型一致,如:
#include<iostream>#include<vector>using namespace std;int main(){vector<int> v(3); v[0]=5; v[1]=2; v[2]=3; vector<int>::iterator it; //定义迭代器变量 for(it=v.begin();it!=v.end();it++) cout<<*it<<" "; //迭代器就是为了数据结构的泛化而设计的一种特殊的指针 cout<<endl;return 0;}
5.元素的插入
insert()方法可以在vector对象的任意位置前插入一个新的元素,同时,vector自动扩张一个元素空间,插入位置后的所有元素依次向后挪动一个位置。
要注意的是,insert()方法要求插入的位置,是元素的迭代器位置,而不是元素的下标,如:
#include<iostream>#include<vector>using namespace std;int main(){vector<int> v(3); v[0]=2; v[1]=5; v[2]=2; v.insert(v.begin(),8); //在第0个新元素,元素的值为8 v.insert(v.begin()+2,3); //在第2个元素前插入新元素1,注意要算上之前插到最前面的元素8 v.insert(v.end(),3); //在向量末尾追加新元素3,因为end()方法返回的是最后一个元素的下一个元素位置 vector<int>::iterator it; for(it=v.begin();it!=v.end();it++) cout<<*it<<" "; cout<<endl;return 0;}
6.元素的删除
erase()方法可以删除vector中迭代器所指的一个元素或一段区间中的所有元素。
clear()方法是一次性删除vector中所有的元素,如:
#include<iostream>#include<vector>using namespace std;int main(){ vector<int> v(10); for(int i(0);i<10;i++) v[i]=i; v.erase(v.begin()+2); //删除第2个元素,从0开始计数 vector<int>::iterator it; for(it=v.begin();it!=v.end();it++) cout<<*it<<" "; cout<<endl; v.erase(v.begin()+1,v.begin()+5); //删除迭代器第1到第5区间的所有元素 for(it=v.begin();it!=v.end();it++) cout<<*it<<" "; cout<<endl; v.clear(); //清空向量 cout<<v.size()<<endl; //输出向量大小return 0;}
7.使用reverse反向排序算法
reverse反向排序算法需要定义头文件#include<algorithm>,reverse算法可以将向量中某段迭代器区间元素反向排序,如:
#include<iostream>#include<vector>#include<algorithm>using namespace std;int main(){ vector<int> v(10); for(int i(0);i<10;i++) v[i]=i; reverse(v.begin()+3,v.end()-3);<span style="white-space:pre">//就是对区间中的元素反向排序</span> vector<int>::iterator it; for(it=v.begin();it!=v.end();it++) cout<<*it<<" ";return 0;}运行结果:0 1 2 6 5 4 3 7 8 9
8.使用sort算法对向量进行排序
使用sort算法,需要头文件#include<algorithm>,sort算法要求使用随机访问迭代器进行排序,在默认的情况下,对向量中的元素进行升序排序,如:
#include<iostream>#include<vector>#include<algorithm>using namespace std;int main(){ vector<int> v; for(int i(0);i<10;i++) v.push_back(9-i); vector<int>::iterator it; for(it=v.begin();it!=v.end();it++) cout<<*it<<" "; cout<<endl; sort(v.begin()+1,v.end()-1); //对区间中的值进行升序排序 for(it=v.begin();it!=v.end();it++) cout<<*it<<" "; cout<<endl;return 0;}运行结果:
9 8 7 6 5 4 3 2 1 0
9 1 2 3 4 5 6 7 8 0
还可以自己设计排序比较函数,然后,把这个函数指定给sort算法,那么sort就根据这个比较函数指定的排序规则进行排序,如:
#include<iostream>#include<vector>#include<algorithm>using namespace std;bool cmp(const int &a,const int &b)//自己设计排序比较函数,对元素的值进行降序排序{ return a>b;}int main(){ vector<int> v; for(int i(0);i<10;i++) v.push_back(i); vector<int>::iterator it; for(it=v.begin();it!=v.end();it++) cout<<*it<<" "; cout<<endl; sort(v.begin()+1,v.end()-1,cmp); //对区间中的值进行升序排序 for(it=v.begin();it!=v.end();it++) cout<<*it<<" "; cout<<endl;return 0;}运行结果:
0 1 2 3 4 5 6 7 8 9
0 8 7 6 5 4 3 2 1 9
9.向量的大小
使用size()方法可以返回向量的大小,即元素的个数。
使用empty()方法返回向量是否为空,如:
#include<iostream>#include<vector>#include<algorithm>using namespace std;bool cmp(const int &a,const int &b){ return a>b;}int main(){ vector<int> v(10); //向量的大小为10 for(int i(0);i<5;i++) v[i]=i; cout<<v.size()<<endl; cout<<v.empty()<<endl; //如果非空返回逻辑假即0,否则返回逻辑真即1 v.clear(); cout<<v.empty()<<endl; vector<int>::iterator it;return 0;}运行结果:
10
0
1
- 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)
- 如何通过创建一个Fraction类(分数)来实现分数的加减乘除,比较大小、约分等方法(方法的实现部分)
- Transaction rolled back because it has been marked as rollback-only
- 远程桌面连接窗口与主机不同步解决办法
- linux下tomcat服务的启动、关闭与错误跟踪
- Java IO 的一般使用原则:
- vector向量容器
- 开启新的activity获取他的返回值
- 命令模式
- HDU 4927 Series 1 ( 组合+高精度)
- oracle中的insert语句
- php中对MYSQL操作之批量执行,与获取批量结果
- hd 2562 奇偶位互换
- Linux时间子系统之四:定时器的引擎:clock_event_device
- Spring中的引介增强