`
dqifa
  • 浏览: 116367 次
社区版块
存档分类
最新评论

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

 

 

From:http://www.xiaomu.net/archives/67.html

分享到:
评论

相关推荐

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

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

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

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

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

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

    list和vector的区别共1页.pdf.zip

    在C++编程中,`list`和`vector`是两种常用的数据结构,它们都是STL(Standard Template Library,标准模板库)的一部分。虽然它们都用于存储和管理元素序列,但它们的设计理念、性能特性和使用场景有着显著的区别。...

    vector操作vector操作vector操作

    在深入探讨STL(Standard Template Library)中的容器如`vector`、`list`与`deque`的操作之前,我们首先简要回顾一下这些容器的基本概念及其在C++编程环境中的重要性。`vector`、`list`和`deque`是STL中三种基本的...

    deque dll.rar

    相比于其他STL容器,如vector和list,deque具有以下特点: 1. **高效随机访问**:deque支持O(1)时间复杂度的随机访问,这使得在任何位置读取或修改元素都非常快速。 2. **灵活的插入和删除**:可以在deque的两端...

    ArrayList、Vector、LinkedList 的区别.docx

    在 Java 集合框架中,ArrayList、Vector、LinkedList 是三个常用的 List 实现类,虽然它们都实现了 List 接口,但是它们在继承关系、实现接口、底层数据结构、扩容机制等方面存在着一些区别。 首先,从继承关系来看...

    C++ STL vector 容器介绍

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

    C++标准模板库中list容器实现

    对于性能优化,`list`在某些情况下可能不如其他容器如`vector`或`deque`。由于每个元素都有额外的指针开销,当存储大量小对象时,`list`的空间效率会降低。同时,由于无法通过索引访问元素,对元素的随机访问效率较...

    演示Sequence容器vector

    本篇文章将专注于一种重要的Sequence容器——`vector`,并探讨其与其他Sequence容器如`list`和`deque`的使用、性能差异以及内部实现原理。 首先,`vector`是一种动态数组,它支持随机访问和连续存储。在构造`vector...

    vector等容器的用法

    本篇文章将深入探讨`vector`、`list`和`deque`这三种常见容器的用法,特别关注`vector`的详细操作。 `vector`是一种动态数组,它提供了类似于数组的功能,但具有自动扩展的能力。`vector`的主要特点和操作包括: 1...

    List,set,Map 的用法和区别

    实现 List 接口的常用类有 LinkedList、ArrayList、Vector 和 Stack。LinkedList 类实现了 List 接口,允许 null 元素。此外 LinkedList 提供了额外的 get、remove、insert 方法在 LinkedList 的首部或尾部。这些...

    vector用法的源代码资源

    - `list`和`forward_list`:使用链接节点实现,插入和删除速度快,但查找速度慢。 八、`vector`的高级用法 - 自定义内存分配器:可以通过传递自定义的内存分配器对象来改变`vector`的内存管理方式。 - `emplace_...

    Java软件开发实战 Java基础与案例开发详解 11-4 List接口实现类 共15页.pdf

    - **定义**: `Vector`类与`ArrayList`类似,但它提供的是线程安全的实现。 - **特点**: - 在多线程环境中更安全,因为所有修改方法都进行了同步处理。 - 性能略低,因为同步会导致一定的开销。 - **构造方法**: -...

    how to use vector

    2. **与`std::deque`**:`std::deque`在某些操作(如两端插入)上可能比`std::vector`更快,但内存分布不如`std::vector`连续。 3. **与`std::list`**:`std::list`在插入和删除操作上更高效,但查找和随机访问效率...

    list,queue 纯C语言 简洁实现

    `std::list`是一个双向链表,支持快速的插入和删除操作,而`std::queue`则是一个接口,它不直接存储元素,而是基于其他容器(如`std::deque`或`std::vector`)实现队列的行为。 在实际开发中,掌握链表和队列的...

    vector定义和初始化

    因此,对于频繁在开头或中间插入/删除元素的情况,`list`或`deque`可能是更好的选择。 ### 示例代码 下面的示例展示了如何使用`vector`定义、初始化、插入、删除和访问元素: ```cpp #include #include <vector> ...

    vc++中队列deque和queue的使用

    与`vector`不同,`deque`的内存不是连续的,这使得在两端操作时效率更高。`deque`的主要特性包括: - 双端操作:可以在开头和末尾高效地添加或删除元素。 - 随机访问:支持随机访问元素,如同数组一样。 - 大小可变...

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

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

    STL_Depue_Vector_Compare

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

Global site tag (gtag.js) - Google Analytics