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

STL序列容器vector,deque,list

 
阅读更多

vector 表示一段连续的内存块每个元素被顺序存储在这段内存中,是一个在堆上建立的一维数组,因为在堆上,所以对其进行erase( ), resieze()等操作;还有一点就是,vector不用担心越界当空间不够用的时候,系统会自动按照一定的比例(对capacity( )大小)进行扩充。 vector最大的优点莫过于是检索(用operator[ ])速度在这三个容器中是最快的,还有就是在vector序列末尾添加(push_back( ))或者删除(pop_back( ))对象效率高,但是在任意位置而不是在vector末尾插人元素则效率很低 ,因为它需要把待插入元素右边的每个元素都拷贝一遍。类似地删除任意一个而不是vector 的最后一个元素效率同样很低。因为在删除元素右边的每个元素都必须被复制一遍这种代价对于大型的复杂的类对象来说尤其大。其它的操作的效率都谈不上很NB,原因就在于当内存不够用的时候要执行重新分配内存,拷贝对象到新存储区,销毁old对象,释放内存等操 作,如果对象很多的话,这种操作代价是相当高的。为了减少这种代价,使用vector最理想的情况就是事先知道所要装入的对象数目,用成员函式 reserve( )预定下来;

 

        dequedouble-ended-queue),是由多段连续内存块构成,同时存在一个映射表对这些内存块进行管理【貌似在OS课程上讲过】。同理该容器也有索引操作operator[ ],效率没vector高。但是,双端队列几乎不存在上述的操作,自然在同等条件下效率好多了。另外,dequevector多了push_front( ) & pop_front( )操作,灵活性更大。

        list的本质是一个双向链表,说到链表,它的高效率首先表现是插入,删除元素,进行排序等等需要移动大量元素的操作。显然链表没有检索操作operator[ ], 也就是说不能对链表进行随机访问,而只能从头至尾地遍历,这是它的一个缺陷。list有不同于前两者的某些成员方法,如合并list的方法splice( ), 排序sort( ),交换list 的方法swap( )等等。

 

下面是选择顺序容器类型的一些准则 :

如果我们需要随机访问一个容器则vector要比list好得多 

如果我们已知要存储元素的个数则vector 又是一个比list好的选择。  

如果我们需要的不只是在容器两端插入和删除元素则list显然要比vector  

除非我们需要在容器首部插入和删除元素否则vector要比deque

分享到:
评论

相关推荐

    STL -容器,string容器

    常见的序列式容器有vector、list、deque等。 关联式容器的特点是无需强调元素的物理顺序,各元素之间没有严格的物理上的顺序关系。常见的关联式容器有set、map等。 在STL容器中,string容器是最常用的容器之一。...

    STL常用容器1

    序列式容器是一类按照元素插入顺序存储的容器,包括vector、queue、deque、priority_queue、list和stack。这些容器有着各自的特点和应用场景。 - **vector**:vector是最基础的序列式容器,它内部采用动态数组...

    C++之STL标准库容器成员一览表.pdf

    本文将对C++ STL标准库容器成员进行概述,包括array、vector、deque、list、forward_list、string、set、multiset、map、multimap、unordered_set、unordered_multiset、unordered_map、unordered_multimap等容器的...

    STL关联容器概述1

    关联容器与序列式容器(如vector、list、deque等)不同,后者是通过元素在容器内的位置顺序来存取元素。关联容器主要包括set、multiset、map和multimap四种标准类型,而SGI STL还提供了hash_table和hash_set等非标准...

    STL容器和算法函数表

    STL不仅提供容器,还有一系列通用算法,如`sort`, `find`, `copy`, `transform`等,这些算法可以作用于任何满足一定要求的序列上,极大提高了编程效率和代码的可读性。例如: - `sort`: 对容器进行排序。 - `find`: ...

    c++容器使用经验

    标准STL序列容器:vector、string、deque和list。 标准STL关联容器:set、multiset、map和multimap。

    STL的应用简介

    容器分为两大类:序列型(vector, deque, list)和关联型(set, multiset, map, multimap)。迭代器是一个“可遍历 STL 容器内全部或部分元素的”对象,可以分为五类:input, output, forward, 双向迭代器和随机迭代...

    STL代码大全(容器,链表,栈,算法,排序等)

    `容器.cpp` 文件可能包含了多种不同类型的STL容器,如`std::vector`、`std::deque`、`std::set`、`std::unordered_set`等。容器是用来存储和管理对象的模板类。例如,`std::vector`提供动态数组的功能,而`std::set...

    STL容器比较

    - **string**:特殊类型的序列容器,用于存储字符序列,其操作类似于vector。 - **slist**:单向链表,只支持前向遍历,插入和删除操作与list相似。 2. **关联容器**: - **set**:存储键值唯一且有序的元素,...

    标准库STL_第1节_顺序容器

    本节主要聚焦于STL中的顺序容器,包括vector、list、forward_list、deque、string以及array,这些都是处理序列数据的核心工具。 1. **vector**:vector是最常用的动态数组,它可以自动调整大小。当你向vector添加...

    C++STL容器.md

    序列式容器是基于元素在内存中连续或接近连续存储的特点设计的,主要包括vector、deque、list等几种类型。 ##### 1. Vector 容器 - **定义**:`vector`是一种动态数组,能够自动管理内存,支持随机访问。 - **特点...

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

    **容器(Container)**是STL中用于存储数据的数据结构,包括顺序容器(如vector、deque、list)和关联容器(如set、map)。每个容器都有自己的特性和用途,例如,vector提供了随机访问,而list支持高效的插入和删除...

    C++ 顺序容器基础知识总结

    C++内置了array(数组)这一序列容器,而STL提供的其他序列容器包括vector、list、forward_list、deque等。这些容器都是模板类,可存储不同类型的对象,且拥有广泛的接口供程序员使用。stack和queue虽然是容器,但...

    stl练习题之四

    首先,STL容器类是C++程序员最常使用的工具之一,它们包括数组(如`std::array`)、顺序容器(如`std::vector`、`std::deque`和`std::list`)、关联容器(如`std::set`、`std::map`)以及非标准容器(如`std::stack`...

    effective STL

    序列容器包括vector、string、deque和list,这些容器以线性方式存储元素,支持随机访问。关联容器则包括set、multiset、map和multimap,它们以键值对的形式存储元素,并保持特定的顺序,通常为排序后的顺序。 对于...

    C++ STL开发技术导引(第5章)

    第10章 bit_vector位向量容器 149 10.1 bit_vector技术原理 149 10.2 bit_vector应用基础 156 10.3 本章小结 161 第11章 set集合容器 162 11.1 set技术原理 162 11.2 set应用基础 181 11.3 本章小结...

    C++STL源码PJ版

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

    STL Guide STL详细教程

    - **序列容器**(如vector、deque、list):主要用于存储按顺序排列的数据。 - **关联容器**(如set、map):用于存储键值对数据,其中键是唯一的。 - **不规则容器**(如stack、queue):提供了特定的操作接口,...

Global site tag (gtag.js) - Google Analytics