vector的使用

1.构造函数

void test_vector1()
{
	vector<int> v; //无参的构造函数
	vector<int> v2(10, 0);//n个value构造,初始化为10个0
	vector<int> v3(v2.begin(), v2.end());//迭代器区间初始化,可以用其他容器的区间初始化
	vector<int> v4(v3); //拷贝构造初始化
}

2.遍历vector的三种方式

//遍历vector
//1.下标[]
for (size_t i = 0; i < v3.size(); i++)
{
	cout << v3[i] << " ";//也可以用at
}
cout << endl;
//2.迭代器
vector<int>::iterator it = v4.begin();
while (it != v4.end())
{
	cout << *it << " ";
	++it;
}
//3.for
for (auto ch : v4)
{
	cout << ch << " ";
}
cout << endl;

3.析构函数

4.capacity

先看一下vector的扩容机制

void test_vector2()
{
	size_t sz;
	vector<int> v;
    v.reserve();提前开好空间,size没有变,capacity变了
	sz = v.capacity();
	cout << "making v grow:\n";
	for (int i = 0; i < 100; i++)
	{
		v.push_back(i);
		if (sz != v.capacity())
		{
			sz = v.capacity();
			cout << "capacity changed:" << sz << '\n';
		}
	}
}

输出:大概是1.5扩容

易错点:reserve空间开出来就可以访问吗?看下面的代码:

void test_vector3()
{
	vector<int> v;
	v.reserve(100); 
	/*for (size_t i = 0; i < v.size(); i++) 不能初始化,因为reserve只是把v的容量变成100,但是size还是0
	{
		v[i] = i;
	}*/
	for (size_t i = 0; i < 100; i++)//错误
	{
		v[i] = i;//[]只能访问0~size-1的数据
	}
	for (auto e : v)
	{
		cout << e << " ";
	}
	cout << endl;
}

要是想访问,只能用下面的方法。

void test_vector3()
{
	vector<int> v;
//	v.reserve(100);//size=0  capacity=100
	v.resize(100); //size=100  capacity=100
	for (size_t i = 0; i < 100; i++)
	{
		v[i] = i;
	}
	for (auto e : v)
	{
		cout << e << " ";
	}
	cout << endl;
}

其中最最重要的是resize和reserve,max_size是没有意义的接口,告诉能开多大空间,但是实际上不准,所以平时不需要管。 

5.[]、at

和string类似

front和back支持访问头尾的数据,但是一搬习惯于[]

6.push_back、pop_back

void test_vector4()
{
	vector<int> v;
	v.push_back(1);
	v.push_back(2);
	v.push_back(3);
	v.push_back(4);
	v.insert(v.begin(), 5); //在pos位置之前,插入val
	for (auto e : v)
	{
		cout << e << " ";
	}
	cout << endl;
	auto it = find(v.begin(), v.end(), 3);//要想在3之前插入,vector里面没有find,algorithm算法库里面有find
	if (it != v.end())
	{
		v.insert(it, 30);
	}
	for (auto e : v)
	{
		cout << e << " ";
	}
    删除
    it = find(v.begin(), v.end(), 3);
	if (it != v.end())
	{
		v.erase(it);
	}
	for (auto e : v)
	{
		cout << e << " ";
	}
    //clear只是清除数据,不清除capacity
}

输出:

  • 11
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值