您的位置:首页 > 编程语言 > C语言/C++

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

2013-12-07 13:29 375 查看
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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: