C++学习笔记 容器

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

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

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

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值