`

vector list deque 三者间的比较

阅读更多

http://blog.csdn.net/ianleelj/article/details/3939354  原文出处。

 

vector

    向量 相当于一个数组
    在内存中分配一块连续的内存空间进行存储。支持不指定vector大小的存储。STL内部实现时,首先分配一个非常大的内存空间预备进行存储,即capacituy()函数返回的大小,
当超过此分配的空间时再整体重新放分配一块内存存储,这给人以vector可以不指定vector即一个连续内存的大小的感觉。通常此默认的内存分配能完成大部分情况下的存储。
   优点:(1) 不指定一块内存大小的数组的连续存储,即可以像数组一样操作,但可以对此数组
               进行动态操作。通常体现在push_back() pop_back()
               (2) 随机访问方便,即支持[ ]操作符和vector.at()
               (3) 节省空间。
   缺点:(1) 在内部进行插入删除操作效率低。
               (2) 只能在vector的最后进行push和pop,不能在vector的头进行
push和pop。
               (3) 当动态添加的数据超过vector默认分配的大小时要进行整体的重新分配、拷贝与释
                     放 

list
    双向链表
    每一个结点都包括一个信息快Info、一个前驱指针Pre、一个后驱指针Post。可以不分配必须的内存大小方便的进行添加和删除操作。使用的是非连续的内存空间进行存储。
   优点:(1) 不使用连续内存完成动态操作。
               
(2) 在内部方便的进行插入和删除操作
               (3) 可在两端进行push、pop
   缺点:(1) 
不能进行内部的随机访问,即不支持[ ]操作符和vector.at()
               (2) 相对于verctor占用内存多

deque

   双端队列 double-end queue
   deque是在功能上合并了vector和list。
   优点:(1) 随机访问方便,即支持[ ]操作符和vector.at()
               
(2) 在内部方便的进行插入和删除操作
               (3) 可在两端进行push、pop
   缺点:
(1) 占用内存多

使用区别:

     1 如果你需要高效的随即存取,而不在乎插入和删除的效率,使用vector 
     2 如果你需要大量的插入和删除,而不关心随即存取,则应使用list 
     3 如果你需要随即存取,而且关心两端数据的插入和删除,则应使用deque
分享到:
评论

相关推荐

    STL标准模板库简介

    2.4 三者比较 3 关联容器 3.1 特点 3.2 C++ SETS & MULTISETS 3.3 C++ MAPS & MULTIMAPS 4 容器适配器 4.1 特点 4.2 C++ STACKS(堆栈) 4.3 C++ QUEUES(队列) 4.4 C++ PRIORITY QUEUES(优先队列) 5 迭代器 ...

    STL使用举例

    `stack`、`queue`和`priority_queue`是STL提供的三种基于其他容器(如`vector`、`deque`)的抽象数据类型。它们分别实现了栈、队列和优先级队列的基本操作,为程序设计者提供了更高层次的抽象,简化了代码实现。 ...

    C++ STL程序员面试题

    - 容器:存储数据的对象,如vector(动态数组)、list(双向链表)、deque(双端队列)和set(红黑树实现的集合)。 - 迭代器:用于遍历容器中元素的指针类,提供了前向、双向和随机访问等多种类型。 - 算法:如...

    stl学习小结, list用法

    这三者紧密相连,容器存储数据,算法处理数据,而迭代器则提供了一种通用的访问机制,使得容器和算法能够无缝协作。 #### 容器 - **向量(Vector)**:提供随机访问的能力,插入和删除操作在尾部时效率较高,但在...

    三十分钟掌握STL 三十分钟掌握STL

    1. **容器(Containers)**:STL中的容器是一些可以存储数据的对象,如`vector`、`list`、`deque`、`set`和`map`等。`vector`是最常用的动态数组,它支持随机访问;`list`是双向链表,适合频繁插入和删除;`deque`...

    stl相关资料 effective stl

    1. **容器**:如vector、list、deque、set和map等,它们各自的特点和适用场景。例如,vector适合随机访问,而list适合频繁的插入和删除操作。 2. **迭代器**:STL的核心组件,用于遍历容器中的元素。了解其分类...

    STL--源码剖析完整版.zip

    STL中的容器是用来存储对象的集合,它们按照不同的数据结构实现,如顺序容器(如vector、deque和list)和关联容器(如set、map)。例如,`vector`是一个动态数组,提供随机访问和快速插入/删除尾元素的能力;`list`...

    c库函数查询完全手册

    在容器类如deque、list、string和vector中,都有相应的`assign`函数,它们用于替换容器中的元素,实现数据的初始化或更新。 对于访问容器元素的函数,如`at(deque)`、`at(string)`和`at(vector)`,它们提供了安全的...

    C++库函数查询手册

    - **简介**:`assign()`函数是多个容器类(如`deque`、`list`、`string`、`vector`)的成员函数,用于重新分配容器的大小并初始化元素。 - **参数**: - `n`:新容器的大小。 - `val`:用于初始化每个元素的值。...

    C++Primer习题答案

    第九章 顺序容器:讲解了vector、deque、list和forward_list四种顺序容器的特性和应用场景,以及如何对它们进行操作和遍历。 第十章 关联容器:介绍set、multiset、map和multimap等关联容器,它们通过键值对存储...

    c++标准模板库STL

    ##### 2.4 三者比较 - **Vector**:适用于需要快速随机访问和在末尾频繁插入删除的场景。 - **List**:适用于需要在任意位置高效插入删除的场景。 - **Deque**:结合了`vector`和`list`的优点,两端都能高效操作,...

    STL.rar_stl入门

    STL中的容器是用于存储数据的对象,例如vector、list、deque、set、map等。每个容器都有其特定的设计目的和性能特性。例如,`vector`是动态数组,提供随机访问但插入和删除元素的效率较低;`list`则是一个双向链表,...

    C++STL程序员开发指南

    1. 容器:STL提供了一系列容器类,如vector(动态数组)、list(双向链表)、deque(双端队列)、set(集合)、map(映射)等,它们用于存储和管理数据。每个容器都有其特定的特性和用途,例如vector适合快速访问和...

    c++ STL 范例大全

    ### C++ STL范例大全:容器部分详解 #### Vector **Vector**是C++标准模板库(STL)中的一个重要容器类型,它提供了一种动态数组...这些例子可以帮助初学者更好地理解和掌握C++ STL中的容器概念,进而提高编程效率。

    C++标准库

    其中,容器如vector、list、deque、set、map等,提供了存储和管理数据的结构;迭代器作为访问这些容器中元素的接口;算法如排序、查找、交换等,提供了高效的操作手段;函数对象(也称谓functors)则增强了函数的可...

    C++_标准模板库(STL).

    #### 三者比较 - **性能**:在尾部插入和删除元素时,`vector`的性能最佳;在列表中的任意位置插入和删除元素时,`list`的性能最佳;`deque`则平衡了两者的优势,两端操作性能较好。 - **内存使用**:`vector`倾向...

    数据结构C++语言描述源码

    1. **容器**:STL中的容器如vector、list、deque、set、map等,它们为数据提供存储空间。vector是动态数组,可以方便地在两端添加或删除元素;list是双向链表,适合频繁插入和删除;deque(双端队列)在两头都可以...

    C++Primer中文版(第4版)完整版

    1. 容器:包括顺序容器(如vector、deque、list)和关联容器(如set、map),提供数据存储和操作的接口。 2. 迭代器:遍历容器元素的工具,类似于指针但更安全、功能更强大。 3. 队列与栈:queue和stack是基于容器的...

    dsacpp_src_vs2015_数据结构与算法_points3r_

    C++中的`std::stack`通常基于`std::deque`或`std::vector`实现,支持push、pop、top等基本操作。栈常用于表达式求值、回溯算法和内存管理等场景。 3. **List**:`std::list`是双向链表的实现,提供了在任何位置快速...

    STLPort模板库,c++高级编程

    STL包括五大容器(vector、list、deque、set和map)、三大迭代器(input iterator、output iterator和random access iterator)、四种算法(排序、查找、变换和赋值)以及两种分配器(默认分配器和自定义分配器)。...

Global site tag (gtag.js) - Google Analytics