C++学习笔记 容器

来源:互联网 发布:网络主播入门培训教程 编辑:程序博客网 时间:2024/05/18 07:58

容器就是特定类型对象的集合。因为可以容纳某相同类型的许多实体,所以叫它容器。  

容器主要分为顺序容器,关联容器(又分为有序关联和无序关联容器)。本文主要是写顺序容器。  

顺序容器有以下几种类型: 

vector: 向量,相当于可变大小的数组。随机访问快,在尾部之外的位置插入或删除元素可能很慢  

deque:双端队列。随机访问快,在头尾部插入删除快。

list: 双向链表。在list中任何位置增加和删除都很快。

forward_list: 单向链表

array: 固定大小的数组。 

string: 与vector相似,但是专门保存字符的。

注意:

string和vector将元素保存在连续内存中(栈中),由于元素是连续存储的,所以通过元素下标来计算其地址是非 常快速的。但在中间位置添加删除会分厂耗时,可能会移动很多元素。

使用vector的时候,通常使用push_back( )函数。向量操作中有一个性能问题,如果频繁扩展容量,会影响到效率。因为扩容意味着分配更大的空间,复制原空间到现空间,删除原空间等操作。但是向量并不是每次扩展都要扩容。当初始化一个向量时,它会预留一部分空间(可用capacity( )查看)。当所需空间超过了预留的空间才会进行扩容。为了提高程序效率,可以根据可能的元素数量来初始化向量。如下例:

vector<string> abc;

abc.reserve(1000);//为abc预留1000个元素空间

list和forward_list不支持随机访问,只能遍历。这两个元素的额外内存开销也很大。

forward_list和array是新C++ 11新增的容器。forward_list的设计目标是达到与手写链表一样的性能,因此其没有size操作(因为保存或计算其大小会增加额外开销)。

 

通常我们使用迭代器来遍历容器中的元素。如下面例子:

vector <int> a(10, 1);

for(vector<int>::iterator it = a.begin();it != a.end(); it++)//注意:a.end()指向最后一个元素的下一个元素

cout<<*it<<endl;

0 0
原创粉丝点击