`
kongweile
  • 浏览: 507274 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

STL序列容器vector,deque,list

 
阅读更多

vector 表示一段连续的内存块每个元素被顺序存储在这段内存中,是一个在堆上建立的一维数组,因为在堆上,所以对其进行erase( ), resieze()等操作;还有一点就是,vector不用担心越界当空间不够用的时候,系统会自动按照一定的比例(对capacity( )大小)进行扩充。 vector最大的优点莫过于是检索(用operator[ ])速度在这三个容器中是最快的,还有就是在vector序列末尾添加(push_back( ))或者删除(pop_back( ))对象效率高,但是在任意位置而不是在vector末尾插人元素则效率很低 ,因为它需要把待插入元素右边的每个元素都拷贝一遍。类似地删除任意一个而不是vector 的最后一个元素效率同样很低。因为在删除元素右边的每个元素都必须被复制一遍这种代价对于大型的复杂的类对象来说尤其大。其它的操作的效率都谈不上很NB,原因就在于当内存不够用的时候要执行重新分配内存,拷贝对象到新存储区,销毁old对象,释放内存等操 作,如果对象很多的话,这种操作代价是相当高的。为了减少这种代价,使用vector最理想的情况就是事先知道所要装入的对象数目,用成员函式 reserve( )预定下来;

 

        dequedouble-ended-queue),是由多段连续内存块构成,同时存在一个映射表对这些内存块进行管理【貌似在OS课程上讲过】。同理该容器也有索引操作operator[ ],效率没vector高。但是,双端队列几乎不存在上述的操作,自然在同等条件下效率好多了。另外,dequevector多了push_front( ) & pop_front( )操作,灵活性更大。

        list的本质是一个双向链表,说到链表,它的高效率首先表现是插入,删除元素,进行排序等等需要移动大量元素的操作。显然链表没有检索操作operator[ ], 也就是说不能对链表进行随机访问,而只能从头至尾地遍历,这是它的一个缺陷。list有不同于前两者的某些成员方法,如合并list的方法splice( ), 排序sort( ),交换list 的方法swap( )等等。

 

下面是选择顺序容器类型的一些准则 :

如果我们需要随机访问一个容器则vector要比list好得多 

如果我们已知要存储元素的个数则vector 又是一个比list好的选择。  

如果我们需要的不只是在容器两端插入和删除元素则list显然要比vector  

除非我们需要在容器首部插入和删除元素否则vector要比deque

分享到:
评论

相关推荐

    c++容器使用经验

    标准STL序列容器:vector、string、deque和list。 标准STL关联容器:set、multiset、map和multimap。

    C++ STL开发技术导引(第5章)

    第10章 bit_vector位向量容器 149 10.1 bit_vector技术原理 149 10.2 bit_vector应用基础 156 10.3 本章小结 161 第11章 set集合容器 162 11.1 set技术原理 162 11.2 set应用基础 181 11.3 本章小结...

    STL设计原理和使用

    介绍STL设计原理和使用 STL概览 迭代器 迭代器适配器 容器 序列式容器-vector、list、deque、string 关联式容器-map、set、multimap、multiset 算法和函数对象 函数对象适配器 STL使用注意事项

    C++ STL 开发技术导引(第6章)

    第10章 bit_vector位向量容器 149 10.1 bit_vector技术原理 149 10.2 bit_vector应用基础 156 10.3 本章小结 161 第11章 set集合容器 162 11.1 set技术原理 162 11.2 set应用基础 181 11.3 本章小结...

    STL源码剖析简体中文完整版(清晰扫描带目录).pdf

    第1 章 STL 概论与著作版本简介 第2 章 空间配置器(allocator) 第3 章 迭代器(iterators)概念与 traits 编程技法 第4 章 序列式容器(sequ ence containers) 第5 章 开关式容器(associated containers) 第6 ...

    STL源码剖析.pdg

    第4章 序列式容器(sequence containers) 113 4.1 容器概观与分类 113 4.1.1 序列式容器(sequence containers) 114 4.2 vector 115 4.2.1 vector 概述 115 4.2.2 vector 定义摘要 115 4.2.3 vector 的迭代...

    C++ STL开发技术导引(第3章)

    第10章 bit_vector位向量容器 149 10.1 bit_vector技术原理 149 10.2 bit_vector应用基础 156 10.3 本章小结 161 第11章 set集合容器 162 11.1 set技术原理 162 11.2 set应用基础 181 11.3 本章小结...

    STL 源码剖析(侯捷先生译著)

    源码之前了无秘密,你将看到vector的实现、list的实现、heap的实现、deque的实现、RB-tree的实现、hash-table的实现、set/map 的实现;你将看到各种算法(排序、搜寻、排列组合、数据移动与复制…)的实现;你甚至将...

    MiniSTL:实现MiniSTL是STL的一个子集,适合用于学习《 STL原始码剖析》(有注释分析测试)

    uninitialized_imp迭代器和迭代器萃取:iterator容器元素和特性的萃取:type_traits基本算法:算法红黑树序列容器:vector,list,deque,stack,queue,set仿函数各个模块的单元测试:unit_test未完成设计模式...

    《STL源码剖析》(候捷 著)

    这本书所呈现的源码,使读者看到vector的实现、list的实现、heap的实现、deque的实现、Red Black tree的实现、hash table的实现、set/map的实现;看到各种算法(排序、查找、排列组合、数据移动与复制技术)的实现;...

    C++标准程序库STL的架构

    5.2.2 序列式容器示例 16 5.2.3 关联式容器 18 5.3 迭代器 18 5.3.1 示例 19 5.3.2 迭代器分类 21 5.4 算法 21 5.4.1 区间 22 5.4.2 处理多个区间 22 5.5 迭代器的配接器 24 5.5.1 种类 24 5.5.2 Insert Insertors ...

    C++STL程序员开发指南【可搜索+可编辑】

    第3 章STL 技术原理· · · · · · · · · · · · · · · · · ·................................. 103 3-1 模板概述· · · · · · • · · · · · · · · · · · · ·.......................

Global site tag (gtag.js) - Google Analytics