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

[转]STL vector list deque比较

 
阅读更多

1 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默认分配的大小时要进行整体的重新分配、拷贝与释
                     放

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

3 deque

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

使用区别:

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

分享到:
评论

相关推荐

    STL中vector、list、deque和map的区别

    STL中vector、list、deque和map的区别

    C++STL vector list map set dqueue 等应用举例及PPT讲解示例,代码演示

    在这个主题中,我们将深入探讨vector、list、map、set和deque这五个主要的STL容器,并通过具体的例子和PPT讲解来理解它们的应用。 1. **vector**:vector是动态数组,它可以方便地在任何位置插入和删除元素,但主要...

    C++ STL vector 容器介绍

    学习`vector`容器时,还需要理解其与其他STL容器如`deque`、`list`和`array`的区别,以便在不同的场景下选择最合适的容器。例如,`deque`在两端插入和删除更高效,`list`则适合频繁的插入和删除,而`array`是固定...

    STL.zip包含vector,deque和丰富的测试用例

    在这个"STL.zip"压缩包中,包含了对vector和deque两种重要容器的自定义实现,以及一系列用于测试这些数据结构的用例。下面我们将深入探讨这两个容器及其相关的编程概念。 首先,`vector`是STL中最常见的动态数组,...

    STL_Depue_Vector_Compare

    6. **与其他容器的比较**:`std::vector`与`std::deque`、`std::list`等其他STL容器在不同操作上的性能对比,可以帮助选择适合特定应用场景的容器。 **总结** “STL_Depue_Vector_Compare”可能是一个关于`std::...

    STL的应用简介

    STL 中的容器包括 vector, deque, list, set, multiset, map, multimap 等。每种容器都有其特点和用途。例如,vector 支持运行时加入新的元素,但是在任意位置插入元素效率较低;map 是一种关联容器,可以根据键值...

    c++stl库头文件及其源码

    - **<stl_list.h>**:`list`是一个双向链表,支持双向迭代和高效插入/删除操作,但随机访问效率较低。 - **<stl_set.h>**:`set`是另一种关联容器,类似于`map`,但它只存储键,不允许重复键值。 - **<stl_deque.h>*...

    STL的使用,文件的读取和改变格式

    1. 容器:如vector、list、deque、set、map等,它们用于存储和管理数据。 2. 迭代器:类似于指针,但提供了更加安全和灵活的方式来遍历容器中的元素。 3. 算法:如sort、find、count等,它们可以应用于各种容器,...

    C++STL详解PPT

    顺序容器包括 vector、deque、list 等,关联容器包括 set、multiset、map、multimap 等,容器适配器包括 stack、queue、priority_queue 等。 顺序容器是 STL 中的一种基本容器,用于存放各种类型的数据。顺序容器...

    STL入门 STL入门 STL入门 STL入门 STL入门 STL入门

    例如,你可以使用STL的sort算法对不同类型的容器进行排序,无论是vector、list还是deque,只要它们的迭代器支持必要的操作,sort都能工作。这是因为sort算法并不关心容器的具体实现,它只依赖于迭代器提供的访问和...

    C++ STL程序员面试题

    STL的主要组件包括容器(如vector、list、set等)、迭代器、算法和函数对象。面试中,对STL的熟悉程度往往反映了程序员对现代C++的理解深度。以下将详细介绍这四个文档可能涉及的STL相关知识点。 1. **STL说明.doc*...

    C++STL源码PJ版

    本资源包含了多个STL容器和算法的源码分析,包括string、vector、deque、list、map、set、bitset、queue和stack等,这些文件名对应了STL中的主要组件。 首先,`string.txt`涉及的是C++中的字符串类,它是处理文本...

    stl_test:STL中deque、list、vector、stack、map、set、hashmap的基本应用

    在这个名为“stl_test”的项目中,我们主要关注STL中的几种容器:deque(双端队列)、list(链表)、vector(动态数组)、stack(栈)、map(关联数组)、set(集合)以及hashmap(哈希表)。这些容器在不同的场景下...

    STL学习,总结了map、vector、list的简单操作

    本篇文章将详细讲解STL中的三个核心容器:map、vector和list,以及它们的基本操作。 首先,我们来看**map**。Map是一个关联容器,它存储键值对(key-value pairs),每个键都是唯一的。键和对应的值通过一对尖括号...

    STL源码剖析--侯捷_繁体转简体中文文字版.rar

    1. 容器:STL中的容器如vector、list、deque、stack、queue、set、multiset、map和multimap等,它们各自有不同的特性和用途。例如,vector是动态数组,提供随机访问和高效的元素插入与删除;list则是双向链表,适合...

    标准模板库STL的使用 实验报告.docx

    2. STL中的容器:STL提供了多种容器,包括vector、list、deque、set、map等,每种容器都有其特点和使用场景。 3. STL中的算法:STL提供了多种算法,包括find、copy、sort、merge等,每种算法都有其特点和使用场景。 ...

    Effective STL Effective STL Effective STL

    1. **理解容器**:书中首先讲解了STL容器的特性,如vector、list、deque、set、map等。每个容器都有其特定的性能特征和适用场景,例如,vector适合随机访问,而list适合频繁的插入和删除操作。 2. **迭代器的使用**...

    STL源码(很不错的源码资料)

    1. **容器**:STL提供了多种容器来存储数据,如vector、list、deque、set、map等。vector是一个动态数组,适合快速访问元素;list是一个双向链表,支持高效的插入和删除操作;deque(双端队列)允许在两端进行插入和...

Global site tag (gtag.js) - Google Analytics