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.zip"压缩包中,包含了对vector和deque两种重要容器的自定义实现,以及一系列用于测试这些数据结构的用例。下面我们将深入探讨这两个容器及其相关的编程概念。 首先,`vector`是STL中最常见的动态数组,...
在这个主题中,我们将深入探讨vector、list、map、set和deque这五个主要的STL容器,并通过具体的例子和PPT讲解来理解它们的应用。 1. **vector**:vector是动态数组,它可以方便地在任何位置插入和删除元素,但主要...
在C++编程中,`list`和`vector`是两种常用的数据结构,它们都是STL(Standard Template Library,标准模板库)的一部分。虽然它们都用于存储和管理元素序列,但它们的设计理念、性能特性和使用场景有着显著的区别。...
在深入探讨STL(Standard Template Library)中的容器如`vector`、`list`与`deque`的操作之前,我们首先简要回顾一下这些容器的基本概念及其在C++编程环境中的重要性。`vector`、`list`和`deque`是STL中三种基本的...
相比于其他STL容器,如vector和list,deque具有以下特点: 1. **高效随机访问**:deque支持O(1)时间复杂度的随机访问,这使得在任何位置读取或修改元素都非常快速。 2. **灵活的插入和删除**:可以在deque的两端...
在 Java 集合框架中,ArrayList、Vector、LinkedList 是三个常用的 List 实现类,虽然它们都实现了 List 接口,但是它们在继承关系、实现接口、底层数据结构、扩容机制等方面存在着一些区别。 首先,从继承关系来看...
学习`vector`容器时,还需要理解其与其他STL容器如`deque`、`list`和`array`的区别,以便在不同的场景下选择最合适的容器。例如,`deque`在两端插入和删除更高效,`list`则适合频繁的插入和删除,而`array`是固定...
对于性能优化,`list`在某些情况下可能不如其他容器如`vector`或`deque`。由于每个元素都有额外的指针开销,当存储大量小对象时,`list`的空间效率会降低。同时,由于无法通过索引访问元素,对元素的随机访问效率较...
本篇文章将专注于一种重要的Sequence容器——`vector`,并探讨其与其他Sequence容器如`list`和`deque`的使用、性能差异以及内部实现原理。 首先,`vector`是一种动态数组,它支持随机访问和连续存储。在构造`vector...
本篇文章将深入探讨`vector`、`list`和`deque`这三种常见容器的用法,特别关注`vector`的详细操作。 `vector`是一种动态数组,它提供了类似于数组的功能,但具有自动扩展的能力。`vector`的主要特点和操作包括: 1...
实现 List 接口的常用类有 LinkedList、ArrayList、Vector 和 Stack。LinkedList 类实现了 List 接口,允许 null 元素。此外 LinkedList 提供了额外的 get、remove、insert 方法在 LinkedList 的首部或尾部。这些...
- `list`和`forward_list`:使用链接节点实现,插入和删除速度快,但查找速度慢。 八、`vector`的高级用法 - 自定义内存分配器:可以通过传递自定义的内存分配器对象来改变`vector`的内存管理方式。 - `emplace_...
- **定义**: `Vector`类与`ArrayList`类似,但它提供的是线程安全的实现。 - **特点**: - 在多线程环境中更安全,因为所有修改方法都进行了同步处理。 - 性能略低,因为同步会导致一定的开销。 - **构造方法**: -...
2. **与`std::deque`**:`std::deque`在某些操作(如两端插入)上可能比`std::vector`更快,但内存分布不如`std::vector`连续。 3. **与`std::list`**:`std::list`在插入和删除操作上更高效,但查找和随机访问效率...
`std::list`是一个双向链表,支持快速的插入和删除操作,而`std::queue`则是一个接口,它不直接存储元素,而是基于其他容器(如`std::deque`或`std::vector`)实现队列的行为。 在实际开发中,掌握链表和队列的...
因此,对于频繁在开头或中间插入/删除元素的情况,`list`或`deque`可能是更好的选择。 ### 示例代码 下面的示例展示了如何使用`vector`定义、初始化、插入、删除和访问元素: ```cpp #include #include <vector> ...
与`vector`不同,`deque`的内存不是连续的,这使得在两端操作时效率更高。`deque`的主要特性包括: - 双端操作:可以在开头和末尾高效地添加或删除元素。 - 随机访问:支持随机访问元素,如同数组一样。 - 大小可变...
本篇文章将详细讲解STL中的三个核心容器:map、vector和list,以及它们的基本操作。 首先,我们来看**map**。Map是一个关联容器,它存储键值对(key-value pairs),每个键都是唯一的。键和对应的值通过一对尖括号...
6. **与其他容器的比较**:`std::vector`与`std::deque`、`std::list`等其他STL容器在不同操作上的性能对比,可以帮助选择适合特定应用场景的容器。 **总结** “STL_Depue_Vector_Compare”可能是一个关于`std::...