C++中的vector

1.头文件声明

#include<vector>

2.初始化

(1)vector<int> v1;        //v1是一个空vector,它执行的是默认初始化。

(2)vector<int> v2(v1);          //v2中包含v1的所有元素,同vector<int>v2=v1;

 (3)   vector<int>v3(n,m);        //v3中包含了n个重复的值为m的元素;m没有的话默认为0.

(4)vector<int>v4{a,b,c,};        //v4包含了三个元素,初始值分别为a,b,c;同vector<int>v4={a,b,c};

 (5) vector<vector<int> > a;         //注意空格,相当这里相当于二维数组int a[n][n];
    在c++11之后 vector<vector<int>> a;也被允许。

3.添加元素

(1)未申请空间

vector<int> v1;
//加到尾部
v1.emplace_back(11);
v1.push_back(3);
//插入元素,插入头部
v1.insert(v1.begin(), 1);
//插入任意位置,n是想要插入的位置
a.insert(a.begin() + n, 1);

(2)直接申请空间

vector<int> v1(3);
v1[0]=2;//直接赋值

对于二维vector变量

//直接申请空间
//构建一个5×5,且所有元素均为0的二维动态数组
vector<vector<int>> v1(5,vector<int>(5,0);

v1[0][1] = 10;
v1[2][3] = 3;






//未申请空间
vector<vector<int>> v1;

//加到尾部
v1.emplace_back({0,1,2}); //v1[0][0]=0,v1[0][1]=1,v1[0][2]=2;
v1.push_back({1,2,3});
//插入元素,插入头部
v1.insert(v1.begin(),{1,1});
//插入任意位置,n是想要插入的位置
v1.insert(v1.begin()+n,{1,1});


其实说到底,对于新元素必须以push之类函数的方式插入,而对于原有的元素以直接访问的方式。

4.访问

for (int i = 0; i < v1.size(); i++)
{
	cout << v1[i] << endl;
	
}

迭代器代码如下:

vector<string> v6 = { "hi","my","name","is","lee" };
for (vector<string>::iterator iter = v6.begin(); iter != v6.end(); iter++)
{
	cout << *iter << endl;
	//下面两种方法都都可以检查迭代器是否为空
	cout << (*iter).empty() << endl;
	cout << iter->empty() << endl; 
}

5.删除元素

(1)删除固定位置

for (int i = 0; i < v1.size(); i++)
	{
		cout << v1[i] << endl;
		
	}
	
cout << "size is :" << v1.size() << endl;
cout << "capacity is :" << v1.capacity() << endl;
	
v1.pop_back();//删除容器尾部元素
for (int i = 0; i < v1.size(); i++)
	{
		cout << v1[i] << endl;

	}
	
cout << "size is :" << v1.size() << endl;
	
cout << "capacity is :" << v1.capacity() << endl;

运行结果

可以发现容器大小变了,但是容量没变。(这么说可能有点奇怪,结合英文理解一下就好了)

 (2)删除指定位置

v1.erase(v1.begin() + 1);//删除第二个位置的元素

6.一些重要函数的补充

vector对象的几个重要操作,举例说明如下:
(1)a.assign(b.begin(), b.begin()+3);//b为向量,将b的0~2个元素构成的向量赋给a
(2)a.assign(4,2);//是a只含4个元素,且每个元素为2
(3)a.back();//返回a的最后一个元素
(4)a.front();//返回a的第一个元素
(5)a[i]; //返回a的第i个元素,当且仅当a[i]存在
(6)a.clear();//清空a中的元素
(7)a.empty();//判断a是否为空,空则返回ture,不空则返回false
(8)a.pop_back();//删除a向量的最后一个元素
(9)a.erase(a.begin()+1,a.begin()+3);//删除a中第1个(从第0个算起)到第2个元素,也就是说删除的元素从a.begin()+1算起(包括它)一直到a.begin()+3(不包括它)
(10)a.push_back(5);//在a的最后一个向量后插入一个元素,其值为5
(11)a.insert(a.begin()+1,5);//在a的第1个元素(从第0个算起)的位置插入数值5,如a为1,2,3,4,插入元素后为1,5,2,3,4
(12)a.insert(a.begin()+1,3,5);//在a的第1个元素(从第0个算起)的位置插入3个数,其值都为5
(13)a.insert(a.begin()+1,b+3,b+6);//b为数组,在a的第1个元素(从第0个算起)的位置插入b的第3个元素到第5个元素(不包括b+6),如b为1,2,3,4,5,9,8,插入元素后为1,4,5,9,2,3,4,5,9,8
(14)a.size();//返回a中元素的个数;
(15)a.capacity();//返回a在内存中总共可以容纳的元素个数
(16)a.rezize(10);//将a的现有元素个数调至10个,多则删,少则补,其值随机
(17)a.rezize(10,2);//将a的现有元素个数调至10个,多则删,少则补,其值为2
(18)a.reserve(100);//将a的容量(capacity)扩充至100,也就是说现在测试a.capacity();的时候返回值是100.这种操作只有在需要给a添加大量数据的时候才 显得有意义,因为这将避免内存多次容量扩充操作(当a的容量不足时电脑会自动扩容,当然这必然降低性能) 
(19)a.swap(b);//b为向量,将a中的元素和b中的元素进行整体性交换
(20)a==b; //b为向量,向量的比较操作还有!=,>=,<=,>,<

 

7.参考文章

1.http://t.csdn.cn/mCeQDhttp://t.csdn.cn/mCeQD  黑马星云https://blog.csdn.net/qiancm

2.http://t.csdn.cn/gHkTJhttp://t.csdn.cn/gHkTJ  千久Plushttps://blog.csdn.net/weixin_46308081

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值