c++ 工程基础之STL系列 (一) vector

STL在c++实际工程中很重要,可以提供开发效率降低维护成本,实际开发中可能大家并不需要了解其内部实现,但了解大概的数据结构还是有好处的。

首先讲下几个在工程中STL的几个典型问题: 1.判断容器为不为空empty() 复杂度是O(1),  而用size() == 0可能是O(N);

2.clear()并不能释放内存,用swap空容器释放

3.局部容器在跳出作用域将自动释放容器内存

4.new 出来的容器,在delete的时候自动释放容器

5.最好不要定义全局的容器,可以通过先定义全局指针,再new的方式

6.容器类的元素最好不要使用指针,因为这样很多时候忘记释放指针指向的内存,很容易造成内存泄露


STL的使用其实很简单,首先讲下STL最常用的容器类vector, 其实就是一个动态数组类,在工程中应用最广泛了一种了

#include<iostream>
#include<vector>
using namespace std;

#include<iostream>
#include<vector>
using namespace std;

int main()
{
	vector<int> v1;
	cout<<"v1.size = "<<v1.size()<<endl;
	cout<<"v1 capacity=" << v1.capacity()<<endl;
	//预留一定长度的数组,防止数组动态增长带来的来回分配内存和拷贝的开销
	//实际工程中很多时候要先预估下数据最大长度的可能值
	v1.reserve(6);
	cout<<"v1.size = "<<v1.size()<<endl;
	cout<<"v1 capacity=" << v1.capacity()<<endl;
	//相当于静态数组
	v1.resize(8);
	cout<<"v1.size = "<<v1.size()<<endl;
	cout<<"v1 capacity=" << v1.capacity()<<endl;
	//clear 并不能释放vector的内存
	v1.clear();
	cout<<"v1.size = "<<v1.size()<<endl;
	cout<<"v1 capacity=" << v1.capacity()<<endl;
	//swap 交换一个空的vector可以释放内存
	vector<int>(v1).swap(v1);
	cout<<"v1 capacity=" << v1.capacity()<<endl;
	
	vector<int> b;
	for(unsigned int i = 0; i < 10; i++)
	{
		b.push_back(i);
		cout<<b.capacity()<<endl;
	}
	cout<<b.front()<<' '<<b.back()<<endl;
	b.pop_back();
	cout<<b.back()<<endl;
	//插入元素	
	//等价于push_back
	vector<int>::iterator it = b.end();
	cout<<*b.insert(it, 100)<<endl;
	//等价于push_front
	it = b.begin();
	cout<<*b.insert(it, 123)<<endl;	
	//删除整个vector
	for(vector<int>::iterator it = b.begin(); it != b.end();)
	{
		it = b.erase(it);
	}
	if(!b.empty()) cout<<"yes"<<endl;
	
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值