【C++】STL容器归纳总结(一)顺序容器

顺序容器:

顺序容器包括:vector、deque、list、forward_list、array以及string

vector:可变大小数组,即将元素保存在一段连续的内存空间中。支持快速随机访问。在尾部之外的位置插入删除元素可能会很慢。

PS:当元素已经占满了预先分配的内存空间,插入新的元素时,开辟一段新的内存空间,大小为之前vector的两倍,再将vector内的元素拷贝到新的内存空间内。

vector的插入删除操作会造成迭代器的失效

list:双向链表。只支持双向顺序访问。在list任何位置进行插入、删除都很快。

注意几个函数:

splice 将1个list的一段连续数据接在另一个list的某个位置之前

merge、sort(使用的是快排)

deque:双向队列,双端开口的连续空间(逻辑上看来是这样的,但并不是vector那样的线性连续空间)。在头尾位置插入删除数据很快。

deque与vector的差异

1.deque允许常数时间内对头端进行数据的插入或删除。

2.deque没有所谓的容量观念,因为它是动态地以分段连续空间组合而成,随时可以增加一段新的空间并链接起来。

deque的实现原理:

deque实际上由一段一段的定量连续空间链接构成,一旦有必要在deque的头部或尾部增加新的空间,便配置一段定量连续空间,串接在整个deque的头端或尾端。

因此deque必须要有一个中央控制组件来维护整体连续的假象并提供随机存取的接口。

deque采用一小块连续空间称为所谓的“map”,“map”内的每一个元素都是指针,指向另一段较大的连续内存空间,被称为缓冲区,缓冲区既是deque存储空间的主体。

如何维持“整体连续“的假象?

通过对deque的迭代器的operator++与operator--的重载来实现。

通过源码可以看到deque的迭代器类内有这么几个成员

T* cur;  此迭代器所指缓冲区中的现行元素

T* first; 此迭代器所指缓冲区中的头

T* last;  此迭代器所指缓冲区中的尾

map_point node; 指向“map”中对应的元素

stack

stack是以deque或list为底部结构,并将其接口改变,以符合“先进后出”的特性来实现的。严格来说不算STL容器中的一类,STL把这种称为container adapter。

PS:stack没有迭代器

queue

queue与stack同理。

顺序容器还有

forward_list 单向链表

string 与vector相似的容器,专门用于保存字符。

    

时间: 2024-12-22 09:33:48

【C++】STL容器归纳总结(一)顺序容器的相关文章

【STL容器学习笔记】-顺序容器

STL提供了三个顺序容器:vector.list和deque.Vector和deque都是用数组来实现的,list是用链表来实现的.关于三者的实现原理和各自应用的场景我们做一下分析. 1.vector就是动态数组,它是在堆中分配内存,如果vector中元素个数大于当前大小时,就会再分配内存.它拥有一段连续的内存空间,并且起始地址不变,因此它能很好地支持随机访问元素,即[ ]操作符.vector对末尾元素进行操作(添加或者删除元素)最快,因为不用移动内存.但如果是在中间位置插入或者删除元素,因为要

STL 笔记(一): 顺序容器 vector、list、deque

STL 容器类 C++ STL 体现了泛型编程的思想,广义上分为: 容器 (Container),迭代器 (Iterator),算法 (Algorithm).容器类可以包含一组相同类型或不同类型的对象,包含相同类型对象时称为同类容器类,包含不同类型对象时,称为异类容器类.容器类库共包含 10 种容器,分为三类: 顺序容器:向量 (vector).双端队列 (deque).列表 (list); 关联容器:集合 (set).多重集合 (multiset).映射 (map)和多重映射 (multima

c++11 顺序容器概括(1)

第一篇博文,希望不是最后一篇.o(∩_∩)o 哈哈 接下来几篇博文会由浅到深地介绍 STL 超好用的顺序容器. 容器:  就是一些特定类型对象的集合. 顺序容器:  定义:顺序容器是容器的一类.该类容器中,对象(元素)在 容器中的位置 与加入容器的顺序相对应,不依赖元素的值.         注意:顺序容器几乎可以保存任意类型的元素,但可能限制元素容器操作.详情请看下篇博文. 所有顺序容器公共的 特点 :  所以顺序容器都提供了快速顺序访问元素的能力. 顺序容器的类型 vector(常用) 1.

C++ Primer笔记5_STL之顺序容器

1.STL(Standard Template Library) 标准模板库.从根本上说,STL是一些"容器"的集合,这些"容器"有list, vector,set,map等,STL也是算法和其它一些组件的集合.这里的"容器"和算法的集合指的是世界上很多聪明人很多年的杰作.每一个C++程序员都应该好好学习STL.大体上包括container(容器).algorithm(算法)和iterator(迭代器),容器和算法通过迭代器可以进行无缝连接. 2

C++primer(第五版)第九章 顺序容器(容器的运用及其部分习题解答,C++11特性总结,重点章节内容较多)

顺序容器:为程序员提供了控制元素存储和访问顺序的能力.(无序容器)           1.顺序容器的概述           A.顺序容器的类型           vector:可变大小数组.支持快速随机访问.在尾部之外的位置插入或删除元素可能很慢.          deque:双端队列.支持快速随机访问.在头尾位置插入/删除速度很快.           list:双向链表.只支持双向顺序访问.在list中任何位置进行插入/删除操作速度都很快.          forword_list

C++ Primer 第九章顺序容器

一.综述 <vector>:可变大小数组.支持快速随机访问.在尾部之外的位置插入或删除元素可能很慢. <deque>:双端队列.支持快速随机访问.在头尾位置插入/删除速度很快. <list>:双向链表.只支持双向顺序访问.在list中任何位置进行插入/删除操作速度都很快. <forward_list>:单向链表.只支持单向顺序访问.在链表任何位置进行插入/删除操作速度都很快. <array>:固定大小数组.支持快速随机访问.不能添加或删除元素.

C++ Primer 第四版读书笔记(八)之顺序容器

容器容纳特定类型对象的集合. 标准库vector类型,是一个顺序容器.它将单一类型元素聚集起来称为容器,然后根据位置来存储和访问这些元素,这就是顺序容器.顺序容器的元素排列次序与元素值无关,而是由元素添加到容器里的次序决定. 标准库定义了三种顺序容器类型:vector.list和deque.它们的差别在于访问元素的方式,以及添加或删除元素相关操作的运行代价.标准库还提供了三种容器适配器.实际上,适配器是根据原始的容器类型所提供的操作,通过定义新的操作接口,来适应基础的容器类型. 顺序容器类型 顺

顺序容器的insert用法

#include <iostream> #include <algorithm> #include <vector> #include <string> #include <list> using namespace std; //顺序容器的insert用法 //顺序容器:vector,deque,list,forward_list,array,string //------------------------------------------

c++顺序容器(3)

1.额外的string操作 除了前面大多数顺序容器的共同操作外,string类型还提供了string和c风格字符数组之间的相互转换,且允许我们用下标代替迭代器版本. string s(cp,n);//cp为数组,拷贝前n个,数组需以空字符结尾,拷贝到空字符结束    string s(s2,pos2);//s2为string,从pos2开始的字符拷贝   string s(s2,pos2,len2): s.substr(m,n);取s字符的m位置到n位置 string还有其他insert和era

C++拾遗(四)——顺序容器

之前一篇博文(<初窥标准库>)简单了解了一种最常用的顺序容器:vector类型.本文将对该文内容进行进一步的学习和完善,继续讨论标准库提供的顺序容器类型.所谓顺序容器,即将单一类型的元素聚集起来成为容器,并根据位置来存储和访问这些元素.标准库定义了三种顺序容器类型:vector,list和deque(double-ended queue双端队列).同时还提供了三种顺序容器适配器(adaptor):stack,queue,priority_queue. 顺序容器 vector 支持快速随机访存