顺序性容器(vector&list&deque)_vector list 赋值顺序-程序员宅基地

技术标签: deque  vector  list  顺序性容器  数据结构  

引言


(1)vector向量相当于一个数组


   在内存中分配一块连续的内存空间进行存储。支持不指定vector大小的存储。STL内部实现时,首先分配一个非常大的内存空间预备进行存储,即capacity()函数返回的大小,当超过此分配的空间时再整体重新放分配一块内存存储,这给人以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


     

vector的使用


基本操作:


(1)头文件#include<vector>.
(2)创建vector对象,vector<int> vec;
(3)尾部插入数字:vec.push_back(a);
(4)使用下标访问元素,cout<<vec[0]<<endl;记住下标是从0开始的。
(5)使用迭代器访问元素.
vector<int>::iterator it;
for(it=vec.begin();it!=vec.end();it++)
    cout<<*it<<endl;
(6)插入元素:    vec.insert(vec.begin()+i,a);在第i+1个元素前面插入a;
(7)删除元素:    vec.erase(vec.begin()+2);删除第3个元素
vec.erase(vec.begin()+i,vec.end()+j);删除区间[i,j-1];区间从0开始
(8)向量大小:vec.size();
(9)清空:vec.clear();
(10)定义排序比较函数:
bool Comp(const int &a,const int &b)
{
    return a>b;
}
调用时:sort(vec.begin(),vec.end(),Comp),这样就降序排序。


list的使用


基本操作


(1)assign() 给list赋值 
(2)back() 返回最后一个元素 
(3)begin() 返回指向第一个元素的迭代器 
(4)clear() 删除所有元素 
(5)empty() 如果list是空的则返回true 
(6)end() 返回末尾的迭代器 
(7)erase() 删除一个元素 
(8)front() 返回第一个元素 
(9)get_allocator() 返回list的配置器 
(10)insert() 插入一个元素到list中 
(11)max_size() 返回list能容纳的最大元素数量 
(12)merge() 合并两个list 
(13)pop_back() 删除最后一个元素 
(14)pop_front() 删除第一个元素 
(15)push_back() 在list的末尾添加一个元素 
(16)push_front() 在list的头部添加一个元素 
(17)rbegin() 返回指向第一个元素的逆向迭代器 
(18)remove() 从list删除元素 
(19)remove_if() 按指定条件删除元素 
(20)rend() 指向list末尾的逆向迭代器 
(21)resize() 改变list的大小 
(22)reverse() 把list的元素倒转 
(23)size() 返回list中的元素个数 
(24)sort() 给list排序 
(25)splice() 合并两个list 
(26)swap() 交换两个list 
(27)unique() 删除list中重复的元素


deque的使用


基本操作


(1)    构造函数
deque():创建一个空deque
deque(int nSize):创建一个deque,元素个数为nSize
deque(int nSize,const T& t):创建一个deque,元素个数为nSize,且值均为t
deque(const deque &):复制构造函数
(2)    增加函数
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)间的数据
(3)    删除函数
Iterator erase(iterator it):删除双端队列中的某一个元素
Iterator erase(iterator first,iterator last):删除双端队列中[first,last)中的元素
void pop_front():删除双端队列中最前一个元素
void pop_back():删除双端队列中最后一个元素
void clear():清空双端队列中最后一个元素
(4)    遍历函数
reference at(int pos):返回pos位置元素的引用
reference front():返回手元素的引用
reference back():返回尾元素的引用
iterator begin():返回向量头指针,指向第一个元素
iterator end():返回指向向量中最后一个元素下一个元素的指针(不包含在向量中)
reverse_iterator rbegin():反向迭代器,指向最后一个元素
reverse_iterator rend():反向迭代器,指向第一个元素的前一个元素
(5)    判断函数
bool empty() const:向量是否为空,若true,则向量中无元素
(6)    大小函数
Int size() const:返回向量中元素的个数
int max_size() const:返回最大可允许的双端对了元素数量值
(7)    其他函数
void swap(deque&):交换两个同类型向量的数据
void assign(int n,const T& x):向量中第n个元素的值设置为x

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/XerxesSimon/article/details/78148094

智能推荐

yii2 smarty php,yii2扩展-twig教程-程序员宅基地

文章浏览阅读94次。安装执行以下命令phpcomposer.pharrequire--prefer-distyiisoft/yii2-twig或添加以下代码到根目录的composer.json"yiisoft/yii2-twig":"~2.0.0"然后 composer update配置打开common/config下main.php加上配置['components'=>['view'=>..._yii2 twig

C语言---用迭代法求x=根号a_c语言用迭代法求平方根√a-程序员宅基地

文章浏览阅读7.4k次,点赞8次,收藏24次。C语言---用迭代法求x=根号a_c语言用迭代法求平方根√a

详解SQL Server 比较带有尾随空格的字符串--【叶子】_mssql中declare中的字符串带有空格-程序员宅基地

文章浏览阅读217次。前记:CSDN论坛上多次出现相关问题,总结一下个人对这个问题的看法,欢迎大家共同讨论。1、问题描述[sql] view plaincopyprint?declare @a varchar(10);set @a='maco ' declare @b varchar(10);set @b='maco' if(@a=@b) _mssql中declare中的字符串带有空格

自然语言处理中的神经网络与深度学习-程序员宅基地

文章浏览阅读722次,点赞18次,收藏14次。1.背景介绍在过去的几年里,自然语言处理(NLP)领域的发展取得了巨大的进步,这主要归功于神经网络和深度学习技术的出现。在本文中,我们将深入探讨自然语言处理中的神经网络与深度学习,包括背景介绍、核心概念与联系、核心算法原理和具体操作步骤、数学模型公式详细讲解、具体最佳实践、实际应用场景、工具和资源推荐以及总结与未来发展趋势与挑战。1. 背景介绍自然语言处理是计算机科学、人工智能和语言学...

1024 分辨率下最快模型,字节跳动文生图开放模型 SDXL-Lightning 发布_sdxllightning下载-程序员宅基地

文章浏览阅读1k次,点赞28次,收藏25次。很高兴跟大家分享我们最新的文生图模型 —— SDXL-Lightning,它实现了前所未有的速度和质量,并且已经向社区开放。_sdxllightning下载

关于cloacked-pixel的一些总结_03-cloacked-pixel-程序员宅基地

文章浏览阅读1.5k次,点赞2次,收藏2次。前两天遇到一道lsb隐写的题目,需要用到cloacked-pixel这个脚本。工具地址下载后解压即可,这里需要注意,该脚本是基于python2的!但我电脑anaconda里面只有python3并没有很好的python基础,但借助anaconda可以轻松解决很多问题!教程如下:anaconda中添加python2但是在运行脚本时还会提示缺库(注意运行时要activate pythonXX手动切换到你所配置的python2环境下)继续使用anaconda为python2装缺少的._03-cloacked-pixel

随便推点

微服务spring cloud 五件套整合,eureka、rabbitMQ、hystrix、zuul、config、feign_微服务有哪几套-程序员宅基地

文章浏览阅读830次。把spring cloud微服务的五件套做了一下整合,一篇文章概括了eureka、rabbitMQ、hystrix、zuul、config、feign,使用的时候复制、粘贴就可以了,不用再单独的到处找啦。_微服务有哪几套

leetcode腾讯精选练习50 题(155. 最小栈)_最小栈的题-程序员宅基地

文章浏览阅读141次。leetcode腾讯精选练习50 题(155. 最小栈)题目描述解题思路代码题目描述设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。push(x) – 将元素 x 推入栈中。pop() – 删除栈顶的元素。top() – 获取栈顶元素。getMin() – 检索栈中的最小元素。示例:MinStack minStack = new MinStack(..._最小栈的题

【C语言进阶】预处理操作(链接)程序编译-程序在编译器如何生成_预处理文件如何生成程序-程序员宅基地

文章浏览阅读539次。预处理操作一级目录二级目录三级目录一级目录二级目录三级目录_预处理文件如何生成程序

win11实时字幕无法下载问题_微软实时字幕下载不了-程序员宅基地

文章浏览阅读776次。一直卡着的话直接去Microsoft Store下载这个试试看。_微软实时字幕下载不了

如何让谷歌Chrome地址栏恢复显示“www”和“https://”标识符_chrome 地址显示原始-程序员宅基地

文章浏览阅读1.1w次。如何让谷歌Chrome地址栏恢复显示“www”和“https://”标识符地址栏隐藏“www”和“https://”标识符  谷歌 Chrome 现在默认在所有网站地址栏中少了一些内容,“www”子域和“https://”被隐藏起来了,因为谷歌认为这些不是大多数人要关注的信息。  Chrome 的产品经理 Emily Schechter 说,他们将开始从桌面版和 Android 版的第..._chrome 地址显示原始

目标跟踪数据集整理(四)----TColor-128(Temple Color 128)_encoding color information for visual tracking: al-程序员宅基地

文章浏览阅读3.5k次。文章目录Encoding Color Information for Visual Tracking:Algorithms and Benchmark 2015官网 下载数据集(4.4G)本文认为颜色信息可以提供丰富的判别线索对于视觉推理,大多数现代视觉跟踪器限制在灰度域。(也就是主要解决输入序列是灰度版本)因此我们在算法和基准两方面做了系统的研究,证明了颜色信息可以帮助提升视觉跟踪效果。..._encoding color information for visual tracking: algorithms and benchmark