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;
首先讲下几个在工程中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; }
相关文章推荐
- c++ 工程基础之STL系列 (二) list
- c++ 工程基础之STL系列 (四) map
- c++ 工程基础之STL系列 (三) set
- 实战c++中的vector系列--vector的遍历(stl算法、vector迭代器(不要在循环中推断不等于end())、operator[])
- C++STL技术原理浅析与应用基础之vector
- c++ STL 系列之二 vector
- 复习C++系列---STL之Vector
- 实战c++中的vector系列--vector应用之STL的find、find_if、find_end、find_first_of、find_if_not(C++11)
- STL基础系列之--vector
- 实战c++中的vector系列--vector应用之STL的find、find_if、find_end、find_first_of、find_if_not(C++11)
- 实战c++中的vector系列--vector的遍历(stl算法、vector迭代器(不要在循环中判断不等于end())、operator[])
- 实战c++中的vector系列--vector的遍历(stl算法、vector迭代器(不要在循环中判断不等于end())、operator[])
- C++STL中vector的使用
- C++ STL/ (3) vector
- C++基础系列八:static类成员
- c++ STL 工程实践的15条建议
- 实战c++中的string系列--std:vector<char> 和std:string相互转换(vector to stringstream)
- 实战c++中的vector系列--再谈vector的insert()方法(都是make_move_iterator惹的祸)
- c++中的二维vector注意事项(object向c++转型系列教程3)
- C++STL中vector容器的用法