**C++Vector用法**
标准库vector类型使用需要的头文件:#include <vector>;
vector 是一个类模板,不是一种数据类型;
vector<int>是一种数据类型;
Vector的存储空间是连续的,list不是连续存储的。
一、 定义和初始化
vector< 类型 > 标识符(最大容量,初始所有值);
vector< typeName > v1;//默认v1为空,故v1[0]=5的赋值是错误的;
vector<typeName>v2(v1); 或v2=v1;
或vector<typeName> v2(v1.begin(), v1.end());
//v2是v1的一个副本,若v1.size()>v2.size()则赋值后v2.size()被扩充为v1.size()。
vector< typeName > v3(n,i);//v3包含n个值为i的typeName类型元素
vector< typeName > v4(n); //v4含有n个值为0的元素
int a[4]={0,1,2,3,3};
vector<int> v5(a,a+5);//v5的size为5,v5被初始化为a的5个值。
//后一个指针要指向将被拷贝的末元素的下一位置。
vector<int> v6(v5);//v6是v5的拷贝
二、 值初始化
1> 如果没有指定元素初始化式,标准库自行提供一个初始化值进行值初始化。
2> 如果保存的式含有构造函数的类类型的元素,标准库使用该类型的构造函数初始化。
3> 如果保存的式没有构造函数的类类型的元素,标准库产生一个带初始值的对象,使用这个对象进行值初始化。
三、vector对象最重要的几种操作
1. v.push_back(t)//在容器的最后添加一个值为t的数据,容器的size变大。
//另外list有push_front()函数,在前端插入,后面的元素下标依次增大。
2. v.size()//返回容器中数据的个数,size返回相应vector类定义的size_type的值。
3. v.resize(2*v.size)或v.resize(2*v.size, 99)// 将v的容量翻倍(并把新元素的值初始化为99)
4. v.empty()//判断vector是否为空
5. v[n]//返回v中位置为n的元素
6. v.insert(pointer,number, content)//向v中pointer指向的位置插入number个content的内容。
v.insert(pointer, content),v.insert(pointer,a[2],a[4])//将a[2]到a[4]三个元素插入。
7. v.pop_back()//删除容器的末元素,并不返回该元素。
8.v.erase(pointer1,pointer2)//删除pointer1到pointer2中间(包括pointer1所指)的元素。
/* vector中删除一个元素后,此位置以后的元素都需要往前移动一个位置,虽然当前迭代器位置没有自动加1,
但是由于后续元素的顺次前移,也就相当于迭代器的自动指向下一个位置一样。*/
9. v1==v2 //判断v1与v2是否相等。
10. !=、<、<=、>、>= //保持这些操作符惯有含义。
11. vector<typeName>::iterator p=v1.begin( );/* p初始值指向v1的第一个元素。*p取所指向元素的值。
对于const vector<typeName>只能用vector<typeName>::const_iterator类型的指针访问。*/
12.p=v1.end( );// p指向v1的最后一个元素的下一位置。
13.v.clear();//删除容器中的所有元素。
四、#include<algorithm>中的泛函算法
搜索算法:find() 、search() 、count() 、find_if() 、search_if() 、count_if()
分类排序:sort() 、merge()
删除算法:unique() 、remove()
生成和变异:generate() 、fill() 、transformation() 、copy()
关系算法:equal() 、min() 、max()
1、sort(v1.begin(),vi.begin()+v1.size/2);// 对v1的前半段元素排序
2、list<char>::iterator pMiddle =find(cList.begin(),cList.end(),'A');
//找到则返回被查内容第一次出现处指针,否则返回end()。
3、vector< typeName >::size_type x ;
// vector< typeName >类型的计数,可用于循环如同for(int i)
4、for (vector<int>::size_type ix = 0; ix != 10; ++ix)
ivec.push_back(ix);
/*在ivec中插入10个新元素,元素值依次为0到9的整数。
警告:必须是已存在的元素才能用下标操作符进行索引。通过下标操作进行赋值时,
不会添加任何元素。仅能对确知已存在的元素进行下标操作*/
C++vector用法总结
猜你喜欢
转载自blog.csdn.net/qq_36686437/article/details/105665803
今日推荐
周排行