vector 表示一段连续的内存块每个元素被顺序存储在这段内存中,是一个在堆上建立的一维数组,因为在堆上,所以对其进行erase( ),
resieze()等操作;还有一点就是,vector不用担心越界当空间不够用的时候,系统会自动按照一定的比例(对capacity(
)大小)进行扩充。 vector最大的优点莫过于是检索(用operator[
])速度在这三个容器中是最快的,还有就是在vector序列末尾添加(push_back(
))或者删除(pop_back(
))对象效率高,但是在任意位置而不是在vector末尾插人元素则效率很低 ,因为它需要把待插入元素右边的每个元素都拷贝一遍。类似地删除任意一个而不是vector 的最后一个元素效率同样很低。因为在删除元素右边的每个元素都必须被复制一遍这种代价对于大型的复杂的类对象来说尤其大。其它的操作的效率都谈不上很NB,原因就在于当内存不够用的时候要执行重新分配内存,拷贝对象到新存储区,销毁old对象,释放内存等操 作,如果对象很多的话,这种操作代价是相当高的。为了减少这种代价,使用vector最理想的情况就是事先知道所要装入的对象数目,用成员函式
reserve( )预定下来;
deque(double-ended-queue),是由多段连续内存块构成,同时存在一个映射表对这些内存块进行管理【貌似在OS课程上讲过】。同理该容器也有索引操作operator[
],效率没vector高。但是,双端队列几乎不存在上述的操作,自然在同等条件下效率好多了。另外,deque比vector多了push_front(
) & pop_front( )操作,灵活性更大。
list的本质是一个双向链表,说到链表,它的高效率首先表现是插入,删除元素,进行排序等等需要移动大量元素的操作。显然链表没有检索操作operator[
], 也就是说不能对链表进行随机访问,而只能从头至尾地遍历,这是它的一个缺陷。list有不同于前两者的某些成员方法,如合并list的方法splice(
), 排序sort(
),交换list 的方法swap( )等等。
下面是选择顺序容器类型的一些准则 :
如果我们需要随机访问一个容器则vector要比list好得多 。
如果我们已知要存储元素的个数则vector 又是一个比list好的选择。
如果我们需要的不只是在容器两端插入和删除元素则list显然要比vector好
除非我们需要在容器首部插入和删除元素否则vector要比deque好
分享到:
相关推荐
C++ STL中的deque与其他序列容器如vector或list相比,具有以下特点: 1. 支持随机访问,因此具有与vector相似的性能特征。 2. 支持在两端进行常数时间复杂度的元素插入和删除操作。 3. 由于其分块存储的特性,因此...
常见的序列式容器有vector、list、deque等。 关联式容器的特点是无需强调元素的物理顺序,各元素之间没有严格的物理上的顺序关系。常见的关联式容器有set、map等。 在STL容器中,string容器是最常用的容器之一。...
序列式容器: 序列式容器是一类按照元素插入顺序存储的容器,包括vector、queue、deque、priority_queue、list和stack。这些容器有着各自的特点和应用场景。 - **vector**:vector是最基础的序列式容器,它内部采用...
本文将对C++ STL标准库容器成员进行概述,包括array、vector、deque、list、forward_list、string、set、multiset、map、multimap、unordered_set、unordered_multiset、unordered_map、unordered_multimap等容器的...
STL中包含了多种容器类型,vector容器就是其中一种非常灵活且广泛使用的序列容器。它提供了动态数组的功能,可以随机访问元素,且能够在序列的末尾高效地添加和移除元素。 在STL的各个版本中,vector容器的实现细节...
关联容器与序列式容器(如vector、list、deque等)不同,后者是通过元素在容器内的位置顺序来存取元素。关联容器主要包括set、multiset、map和multimap四种标准类型,而SGI STL还提供了hash_table和hash_set等非标准...
STL不仅提供容器,还有一系列通用算法,如`sort`, `find`, `copy`, `transform`等,这些算法可以作用于任何满足一定要求的序列上,极大提高了编程效率和代码的可读性。例如: - `sort`: 对容器进行排序。 - `find`: ...
标准STL序列容器:vector、string、deque和list。 标准STL关联容器:set、multiset、map和multimap。
在STL容器方面,序列容器包括vector、list和deque。vector是动态数组,适合快速随机访问;list是双向链表,插入和删除效率高;deque是双端队列,可以在两端进行高效的插入和删除操作。容器适配器stack和queue分别...
容器分为两大类:序列型(vector, deque, list)和关联型(set, multiset, map, multimap)。迭代器是一个“可遍历 STL 容器内全部或部分元素的”对象,可以分为五类:input, output, forward, 双向迭代器和随机迭代...
`容器.cpp` 文件可能包含了多种不同类型的STL容器,如`std::vector`、`std::deque`、`std::set`、`std::unordered_set`等。容器是用来存储和管理对象的模板类。例如,`std::vector`提供动态数组的功能,而`std::set...
- **string**:特殊类型的序列容器,用于存储字符序列,其操作类似于vector。 - **slist**:单向链表,只支持前向遍历,插入和删除操作与list相似。 2. **关联容器**: - **set**:存储键值唯一且有序的元素,...
本节主要聚焦于STL中的顺序容器,包括vector、list、forward_list、deque、string以及array,这些都是处理序列数据的核心工具。 1. **vector**:vector是最常用的动态数组,它可以自动调整大小。当你向vector添加...
不过,如果程序需要频繁地在序列中间进行插入和删除操作,list或者deque等其他容器可能更为合适。 vector的动态特性意味着它在处理大型数据集时非常有用,特别是当数据集的大小在编译时无法预知时。然而,它并不是...
序列式容器是基于元素在内存中连续或接近连续存储的特点设计的,主要包括vector、deque、list等几种类型。 ##### 1. Vector 容器 - **定义**:`vector`是一种动态数组,能够自动管理内存,支持随机访问。 - **特点...
序列容器如vector、string、deque和list,它们按照元素的顺序存储数据。其中,vector是最常用的一种,它在内存中连续存储元素,支持随机访问。string则专门用于字符串处理,而deque(双端队列)允许在两端进行插入和...
**容器(Container)**是STL中用于存储数据的数据结构,包括顺序容器(如vector、deque、list)和关联容器(如set、map)。每个容器都有自己的特性和用途,例如,vector提供了随机访问,而list支持高效的插入和删除...
STL 容器是一些模板类,提供了多种组织数据的常用方法,例如 vector(向量,类似于数组)、list(列表,类似于链表)、deque(双向队列)、set(集合)、map(映象)、stack(栈)、queue(队列)、priority_queue...
C++内置了array(数组)这一序列容器,而STL提供的其他序列容器包括vector、list、forward_list、deque等。这些容器都是模板类,可存储不同类型的对象,且拥有广泛的接口供程序员使用。stack和queue虽然是容器,但...