c++ 工程基础之STL系列 (一) vector
来源:互联网 发布:阿里云 青岛 编辑:程序博客网 时间:2024/04/29 14:15
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_backvector<int>::iterator it = b.end();cout<<*b.insert(it, 100)<<endl;//等价于push_frontit = b.begin();cout<<*b.insert(it, 123)<<endl;//删除整个vectorfor(vector<int>::iterator it = b.begin(); it != b.end();){it = b.erase(it);}if(!b.empty()) cout<<"yes"<<endl;}
- c++ 工程基础之STL系列 (一) vector
- STL基础系列之--vector
- c++ 工程基础之STL系列 (二) list
- c++ 工程基础之STL系列 (三) set
- c++ 工程基础之STL系列 (四) map
- STL系列之vector(1)
- c++STL之vector
- C++STL之vector
- C++STL之vector
- C++STL之vector
- STL系列之vector(容器)
- C++(18):STL之vector初步
- C++STL之vector详解(转)
- C++STL技术原理浅析与应用基础之vector
- STL之vector的使用一(初始化vector)
- 3.5 STL之vector的使用一(初始化vector)
- STL之Vector(一):Vector的基本用法
- C++STL之vector容器
- test5-9(体会棋盘游戏中的数据存储)
- 15周问题7
- 关于<mvc:annotation-driven/>的学习
- php使用正则表达式
- JMS简明学习教程
- c++ 工程基础之STL系列 (一) vector
- Java_协同开发之Eclipse上SVN插件Subclipse的使用
- 菜鸟求指教~类的私有成员是指针应该怎么用构造函数赋值!!!
- 【cocos2d-x IOS游戏开发-城市跑酷1】跑酷游戏介绍
- Doxygen使用教程
- ERP SYSTEM 开发指南(一)
- 经典面试题,求两个集合的交集
- 用.NET创建并且覆盖AutoCAD的标注样式
- windows 8.1下安装android开发环境相关问题