vector 向量容器
2019-11-14 12:48:08
供稿:网友
vector 向量容器不但能像数组一样对元素进行随机访问,还能在尾部插入元素,是一种简单、高效的容器,完全可以代替数组。头文件:#include <vector>vector 容器的下标是从0 开始计数的.对于vector 容器的容量定义,可以事先定义一个固定大小,事后, 可以随时调整其大小;也可以事先不定义,随时使用push_back()方法从尾部扩张元素,通常使用 push_back()对vector 容器在尾部追加新元素。尾部追加元素,vector 容器会 自动分配新内存空间。可对空的vector 对象扩张,也可对已有元素的vector 对象扩张。例如::vector<int> v; v.push_back(2);insert()在某个元素位置前插入新元素。insert()方法可以在vector 对象的任意位置前插入一个新的元素,同时,vector 自动扩 张一个元素空间,插入位置后的所有元素依次向后挪动一个位置。 要注意的是,insert()方法要求插入的位置,是元素的迭代器位置,而不是元素的下标vector<int> v(3);v[0]=2;v[1]=7;v[2]=9;//在最前面插入新元素,元素值为8v.insert(v.begin(),8);//在第2 个元素前插入新元素1v.insert(v.begin()+2,1);//在向量末尾追加新元素3v.insert(v.end(),3);//定义迭代器变量vector<int>::iterator it;for(it=v.begin();it!=v.end();it++){//输出迭代器上的元素值cout<<*it<<" ";}//换行输出:8 2 1 7 9 3元素的删除:erase()方法: 可以删除vector 中迭代器所指的一个元素或一段区间中的所有元素。clear()方法: 则一次性删除vector 中的所有元素。#include <vector>#include <iostream>using namespace std;int main(){ vector<int> v(10); for(int i=0; i<10; i++) { v[i]=i; }//删除下标是2 个元素,从0 开始计数 v.erase(v.begin()+2);//定义迭代器变量 vector<int>::iterator it; for(it=v.begin(); it!=v.end(); it++) {//输出迭代器上的元素值 cout<<*it<<" "; }//换行 cout<<endl;//删除迭代器第1 到第5 区间的所有元素 v.erase(v.begin()+1,v.begin()+5); for(it=v.begin(); it!=v.end(); it++) {//输出迭代器上的元素值 cout<<*it<<" "; }//换行 cout<<endl;//清空向量 v.clear(); cout<<v.size()<<endl; return 0;}运行结果:0 1 3 4 5 6 7 8 90 6 7 8 90两个重要的方法:begin():返回的是首元素位置的迭代器end():返回的是最后一个元素的下一元素位置的迭代器创建vector对象:创建 vector 对象常用的有三种形式。(1)不指定容器的元素个数,如定义一个用来存储整型的容器:vector<int> v;(2)创建时,指定容器的大小,如定义一个用来存储10 个double 类型元素的向量容器:vector<double> v(10);注意,元素的下标为 0~9;另外,每个元素的值被初始化为0.0。(3)创建一个具有n 个元素的向量容器对象,每个元素具有指定的初始值:vector<double> v(10,8.6);上述语句定义了 v 向量容器,共有10 个元素,每个元素的值是8.6。访问:1.利用下标既可访问也可赋值这点类似于数组的访问方式。vector<int> v(3);v[0]=2;v[1]=7;v[2]=9;cout<<v[0]<<" "<<v[1]<<" "<<v[2]<<endl;2.也可以使用迭代器迭代器的类型一定要与它 要遍历的vector 对象的元素类型一致。vector<int> v(3);v[0]=2;v[1]=7;v[2]=9;//定义迭代器变量vector<int>::iterator it;for(it=v.begin();it!=v.end();it++) //注意:这里的it只能用it++,不可用it+=1;{//输出迭代器上的元素值cout<<*it<<" ";}使用reverse 反向排列算法reverse 反向排列算法,需要定义头文件“#include <algorithm>”,//反向排列向量的从首到尾间的元素reverse(v.begin(),v.end());输出:9 8 7 6 5 4 3 2 1 使用sort 算法对向量元素排序使用 sort 算法,需要声明头文件“#include <algorithm>”。//排序,升序排列sort(v.begin(),v.end());//自己设计排序比较函数:对元素的值进行降序排列bool Comp(const int &a,const int &b){if(a!=b)return a>b;else return a>b;}//按Comp 函数比较规则排序sort(v.begin(),v.end(),Comp);向量的大小:使用 size()方法可以返回向量的大小,即元素的个数。使用 empty()方法返回向量是否为空。//输出向量的大小,即包含了多少个元素cout<<v.size()<<endl;//输出向量是否为空,如果非空,则返回逻辑假,即0,否则返回逻辑真,即1cout<<v.empty()<<endl;