C++vector用法总结

               **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() 
1sort(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)
4for (vector<int>::size_type ix = 0; ix != 10; ++ix)
           
            ivec.push_back(ix);
 /*在ivec中插入10个新元素,元素值依次为0到9的整数。
警告:必须是已存在的元素才能用下标操作符进行索引。通过下标操作进行赋值时,
不会添加任何元素。仅能对确知已存在的元素进行下标操作*/ 


  

猜你喜欢

转载自blog.csdn.net/qq_36686437/article/details/105665803