C++——STL之vector, list, deque容器对比与常用函数

STL 三种顺序容器的特性对比:

  • vector 可变数组,内存空间是连续的,容量不会进行缩减。支持高效随机存取,即支持[]和at()操作。尾部插入删除效率高,其他位置插删效率较低;
  • list 双向链表,内存空间可不连续,不支持随机存取。插入和删除的效率很高;
  • deque  双端队列,内存空间是多个连续的内存块,在一个映射结构中保存对这些块以及顺序的跟踪,可利用的内存更大,且内存大小是可以自动缩减的。支持随机存取,但是随机存取性能没有vector 好。首尾插入效率高,其他位置插删效率低;

使用注意:

  • 对于 vector 和 deque,使用随机访问时注意不要越界;
  • 对于 vector 的非尾部插入删除和 deque的非首尾插入删除,会导致部分元素的移动,这是需要考虑之前正在用的迭代器、指针或索引是否需要调整;

vector 容器常用函数

vector 容器常用函数:

#构造:
vector():                       #创建一个空vector
vector(int nSize):              #创建一个vector,元素个数为nSize
vector(int nSize,const t& t):   #创建一个vector,元素个数为nSize,且值均为t
vector(const vector&):          #复制构造函数
vector(begin,end):              #复制[begin,end)区间内另一个数组的元素到vector中
#增删:
void push_back(const T& x):                    #向量尾部增加一个元素X
iterator insert(iterator it,const T& x):       #向量中迭代器指向元素前增加一个元素x
iterator insert(iterator it,int n,const T& x): #向量中迭代器指向元素前增加n个相同的元素x
iterator insert(iterator it,const_iterator first,const_iterator last): #向迭代器指向元素前插入另一个相同类型向量的[first,last)间的数据
iterator erase(iterator it):                   #删除向量中迭代器指向元素
iterator erase(iterator first,iterator last):  #删除向量中[first,last)中元素
void pop_back():                               #删除向量中最后一个元素
void clear():                                  #清空向量中所有元素
#遍历:
reference at(int pos):      #返回pos位置元素的引用
reference front():          #返回首元素的引用
reference back():           #返回

List容器常用函数

#构造:
list<Elem> c:           #创建一个空的list
list<Elem> c1(c2):      #复制另一个同类型元素的list
list<Elem>c(n):         #创建n个元素的list,每个元素值由默认构造函数确定
list<Elem>c(n,elem):    #创建n个元素的list,每个元素的值为elem
list<Elem>c(begin,end): #由迭代器创建list,迭代区间为[begin,end)
#增删:
void push_back(const T& x):     #尾部增加一个元素x
void push_front(const T& x):    #首部添加一个元素X
void pop_back():                #删除容器尾元素,当且仅当容器不为空
void pop_front():               #删除容器首元素,当且仅当容器不为空
void remove(const T& x):        #删除容器中所有元素值等于x的元素
void clear():                   #删除容器中的所有元素
iterator insert(iterator it, const T& x ):       #在迭代器指针it前插入元素x,返回x迭代器指针
void insert(iterator it,size_type n,const T& x): #迭代器指针it前插入n个相同元素x
void insert(iterator it,const_iterator first,const_iteratorlast):  #把[first,last)间的元素插入迭代器指针it前
iterator erase(iterator it):                     #删除迭代器指针it对应的元素
iterator erase(iterator first,iterator last):    #删除迭代器指针[first,last)间的元素
#遍历:
iterator begin():            #返回首元素的迭代器指针
iterator end():              #返回尾元素之后位置的迭代器指针
reverse_iterator rbegin():   #返回尾元素的逆向迭代器指针,用于逆向遍历容器
reverse_iterator rend():     #返回首元素前一个位置的迭代器指针
reference front():           #返回首元素的引用
reference back():            #返回尾元素的引用
#功能:
void sort():                             #容器内所有元素排序,默认是升序
template<class Pred>void sort(Pred pr):  #容器内所有元素根据预断定函数pr排序
void swap(list& str):                    #两list容器交换功能
void unique():                           #容器内相邻元素若有重复的,则仅保留一个
void splice(iterator it,list& li):                #队列合并函数,队列li所有函数插入迭代指针it前,x变成空队列
void splice(iterator it,list& li,iterator first): #队列li中移走[first,end)间元素插入迭代指针it前
void splice(iterator it,list& li,iterator first,iterator last): #x中移走[first,last)间元素插入迭代器指针it前
void reverse():                          #反转

Deque容器常用函数

#构造
deque():                     #创建一个空deque
deque(int nSize):            #创建一个deque,元素个数为nSize
deque(int nSize,const T& t): #创建一个deque,元素个数为nSize,且值均为t
deque(const deque &):        #复制构造函数
#增删:
void push_front(const T& x):                  #双端队列头部增加一个元素X
void push_back(const T& x):                   #双端队列尾部增加一个元素x
iterator insert(iterator it,const T& x):      #双端队列中某一元素前增加一个元素x
void insert(iterator it,int n,const T& x):    #双端队列中某一元素前增加n个相同的元素x
void insert(iterator it,const_iterator first,const_iteratorlast):  #双端队列中某一元素前插入另一个相同类型向量的[forst,last)间的数据
iterator erase(iterator it):                  #删除双端队列中的某一个元素
iterator erase(iterator first,iterator last): #删除双端队列中[first,last)中的元素
void pop_front():                             #删除双端队列中最前一个元素
void pop_back():                              #删除双端队列中最后一个元素
void clear():                                 #清空双端队列中最后一个元素
#遍历:
reference at(int pos):          #返回pos位置元素的引用
reference front():              #返回手元素的引用
reference back():               #返回尾元素的引用
iterator begin():               #返回向量头指针,指向第一个元素
iterator end():                 #返回指向向量中最后一个元素下一个元素的指针(不包含在向量中)
reverse_iterator rbegin():      #反向迭代器,指向最后一个元素
reverse_iterator rend():        #反向迭代器,指向第一个元素的前一个元素
#功能:
bool empty() const:             #向量是否为空,若true,则向量中无元素
int size() const:               #返回向量中元素的个数
int max_size() const:           #返回最大可允许的双端对了元素数量值
void swap(deque&):              #交换两个同类型队列的数据
void assign(int n,const T& x):  #向量中第n个元素的值设置为x  

参考:https://blog.csdn.net/hlsdbd1990/article/details/46664751

原文地址:https://www.cnblogs.com/yrm1160029237/p/10291315.html

时间: 2024-10-05 07:32:59

C++——STL之vector, list, deque容器对比与常用函数的相关文章

STL学习三:deque容器

1.Deque简介 deque是“double-ended queue”的缩写,和vector一样都是STL的容器,deque是双端数组,而vector是单端的. deque在接口上和vector非常相似,在许多操作的地方可以直接替换. deque可以随机存取元素(支持索引值直接存取, 用[]操作符或at()方法,这个等下会详讲). deque头部和尾部添加或移除元素都非常快速.但是在中部安插元素或移除元素比较费时. 2.deque对象的默认构造 deque采用模板类实现,deque对象的默认构

STL之vector,数组线性容器array,list容器,算法find,find_if,bind1st,仿函数

 1.STL(Standard Template Library,是用泛型技术来设计完成的实例)的概念与组成 Iterator(迭代器) Container(容器) Algorithm(算法) Adaptors(配接器) STL的六大组件分别是: 容器(Container) 算法(Algorithm) 迭代器(Iterator) 仿函数(Function object) 适配器(Adapter) 空间配置器(allocator):只能分配内存等 2.容器与算法 案例如下: #include<

vector,list,deque容器的迭代器简单介绍

我们知道标准库中的容器有vector,list和deque.另外还有slist,只不过它不是标准容器.而谈到容器,我们不得不知道进行容器一切操作的利器---迭代器.而在了解迭代器之前,我们得先知道每个容器的结构,包括它的逻辑结构和物理结构.让我们先说说vector: 一.vector 我们先来看看vector容器内元素在内存中的布局: 其中的#0,#1...就是容器内的元素.从上图可以看出vector维护的是一个连续的线性空间,和数组是一样的.所以不论其元素为何种型别,普通指针就可以作为vect

C++ STL中vector(向量容器)使用简单介绍

原文:http://www.seacha.com/article.php/knowledge/cbase/2013/0903/2205.html C++ vector(向量容器)是一个线性顺序结构.相当于数组,但其大小可以不预先指定,并且自动扩展.它可以像数组一样被操作,由于它的特性我们完全可以将vector 看作动态数组,或者作为动态内存. 在创建一个vector 后,它会自动在内存中分配一块连续的内存空间进行数据存储,初始的空间大小可以预先指定也可以由vector 默认指定,这个大小即cap

stl容器区别: vector list deque set map及底层实现

在STL中基本容器有: vector.list.deque.set.map set 和map都是无序的保存元素,只能通过它提供的接口对里面的元素进行访问 set :集合, 用来判断某一个元素是不是在一个组里面,使用的比较少 map :映射,相当于字典 ,把一个值映射成另一个值,如果想创建字典的话使用它好了 底层采用的是树型结构,多数使用平衡二叉树实现 ,查找某一值是常数时间,遍历起来效果也不错, 只是每次插入值的时候,会重新构成底层的平衡二叉树,效率有一定影响. vector.list.dequ

STL容器 vector,list,deque 性能比较

C++的STL模板库中提供了3种容器类:vector,list,deque对于这三种容器,在觉得好用的同时,经常会让我们困惑应该选择哪一种来实现我们的逻辑.在少量数据操作的程序中随便哪一种用起来感觉差别并不是很大,但是当数据达到一定数量后,会明显感觉性能上有很大差异. 本文就试图从介绍,以及性能比较两个方面来讨论这个问题. vector - 会自动增长的数组 list - 擅长插入删除的链表 deque - 拥有vector和list两者优点的双端队列 性能竞技场 性能总结与使用建议 测试程序清

c++ stl deque容器

c++中,Deque容器和vector相似,deque内部也采用动态数组来管理元素,支持随机存取..头文件<deque> 1.deque和vector的不同之处: 1)两端都可以较快速地按插元素和删除元素,而vector只能在尾端进行 2)在对内存有所限制的系统中,deque可以包含更多的元素,因为它不止一块内存.因此deque的max_size()可能更大 3)deque不支持对容量和内存的重分配时机的控制. 4)deque的内存区块不再被使用时,会被释放.deque的内存大小是可缩减的,由

带你深入理解STL之Deque容器

在介绍STL的deque的容器之前,我们先来总结一下vector和list的优缺点.vector在内存中是分配一段连续的内存空间进行存储,其迭代器采用原生指针即可,因此其支持随机访问和存储,支持下标操作符,节省空间.但是其在分配的内存不够的情况下,需要对容器整体进行重新分配.拷贝和释放等操作,而且在vector中间插入或删除元素效率很低. 而list是以节点形式来存放数据,使用的是非连续的内存空间来存放数据,因此,在其内部插入和删除元素的时间复杂度都是O(1),但是其不支持随机访问和存取,不支持

C++各个容器比较(vector,deque,list,set,map,queue,stack)

1.vector(连续的空间存储,可以使用[ ]操作符)可以快速的访问随机的元素,快速的在末尾插入元素,但是在序列中间随机的插入.删除元素要慢.而且,如果一开始分配的空间不够时,有一个重新分配更大空间的过程. 2.deque(小片的连续,小片间用链表相连,实际上内部有一个map的指针,因为知道类型,所以还是可以使用[ ],只是速度没有vector快)快速的访问随机的元素,快速的在开始和末尾插入元素.随机的插入删除元素要慢,空间的从新分配空间后,原有的元素不需要备份.对deque的排序操作,可将d