STL容器之vector、list

c++中的string、vector、list、stack、set、map等常用STL容器总结 文章目录string类vectorliststackqueuepriority_queue(优先级队列)deque(双端队列) string类 string类简介: 1.string类是表示字符串的字符串类 2. string在底层实际是:basic_string模板类的别名,typedef basic_string<char, char_traits, allocator> string 3. 不能操作多字节或者变长字符的序列 常用接口 void Teststring() { stri 阅读详情

上一篇:STL容器简介

1、动态数组vector

2、双向链表list

下一篇:STL容器之set、map、unordered_set、unordered_map


1、动态数组vector

  • vector将其元素放在一个动态数组中管理,它允许随机访问,在vector尾部附加或者移除元素都很快,但是在vector中间或起始段安插元素比较费时,因为作用点之后的每个元素都必须移动到另一位置。
  • 一旦内存重新分配,vector元素相关的所有reference、pointer、iterator都会失效
  • 内存重新分配很耗时,如果程序的运行时间对你至关重要,你必须考虑容量问题。可以使用reserve()保留适当容量,避免重新分配内存。此外,初始化期间就向构造函数传递额外实参,构建足够大的空间也可以避免重新分配内存。
  • vector不能使用reserve缩减容量,调用reserve所给的实参如果小于当前vector的容量,不会引发任何效果。

    除了STL容器简介中的公共函数以外,vector类还拥有的成员函数如下:

vector<int> v1

vector<int> v2 = v1

vector<int> v2(v1)

vector<int> v2(n)

vector<int> v2(n, elem)

vector<int> v2(beg, end)

vector<int> v2(initlist)

vector<int> v2 = initlist.

产生一个空的vector

使用v1初始化v2

使用v1初始化v2

构建一个大小为n的vector

构建一个大小为n的vector,每个元素为elem

使用iterator初始化v2

使用初始化列表初始化v2

使用初始化列表初始化v2

v.~vector()销毁所有元素,释放内存
v.capacity()返回不进行空间重新分配条件下的元素最大容纳量
v.reserve(num)如果容量不足,扩大容量
v.shrink_to_fit()降低容量以符合元素个数
v.assign(n, elem)复制n个elem,复制给v
v.assign(beg, end)将区间内元素赋值给v
v.assign(initlist)将初值列赋值给v
v1.swap(v2)交换v1和v2的数据
swap(v1, v2)交换v1和v2的数据
v [idx]返回索引idx所指的元素
v.at( idx )返回索引idx所指的元素
v.front()返回第一个元素
v.back()返回最后一个元素
v.rbegin()返回反向iterator指向的反向迭代的第一个元素
v.rend()返回反向iterator指向的反向迭代最后一个元素的下一个位置
v.crbegin()返回const iterator反向迭代的第一个元素
v.crend()返回const iterator反向迭代的最后一个元素的下一个位置
v.push_back(elem)附加一个elem到末尾
v.pop_back()移除最后一个元素,但是不返回它
v.insert(pos, elem)在iterator位置pos之前插入elem,并返回新元素位置
v.insert(pos, n, elem)在iterator位置pos之前插入n个elem,并返回第一个新元素位置
v.insert(pos, beg, end)在iterator位置pos之前插入区间内所有元素,并返回第一个新元素位置
v.insert(pos, initlist)在iterator位置pos之前插入initlist所有元素,并返回第一个新元素位置
v.emplace(pos, args...)在iterator位置pos之前插入一个以args为初值的元素,并返回新元素位置
v.emplace_back(args...)附加一个以args为初值的元素于末尾,不返回任何东西
v.erase(pos)移除iterator位置pos上的元素,返回下一个元素位置
v.erase(beg, end)移除区间内的所有元素,返回下一个元素位置
v.resize(num)将元素量改为num,多出的元素用default构造函数完成初始化
v.resize(num, elem)将元素量改为num,多出的元素用elem初始化

strcpy(&v[0], "hello world")

strcpy(v.data(), "hello world")

printf("%s\n", v.data())

把vector当做C语言中的数组使用

2、双向链表list

  • list的内部结构完全和vector不同,list对象自身提供了两个pointer,或者成为anchor,用来指向第一个和最后一个元素。list不支持随机访问,但在任何位置上执行元素的安插和移除都非常快。
  • 安插和删除都不会造成指向其它元素的各个pointer、reference和iterator失效。
  • list对于异常的处理方式是要么操作成功,要么什么都不发生,绝不会陷入“只成功一半”的这种尴尬境地。

    除了STL容器简介中的公共函数以外,vector类还拥有的成员函数如下:

list<int> l;

list<int> l(l2);

list<int> l = l2;

list<int> l(n);

list<int> l(n, elem);

list<int> l(begin, end);

list<int> l(initlist);

list<int> l = initlist

默认构造函数,产生一个空的list

复制构造函数,建立l2同型的list并成为l2的一份拷贝

复制构造函数,建立l2同型的list并成为l2的一份拷贝

利用默认构造函数生成一个大小为n的list

建立一个大小为n的list,每个元素为elem

建立一个list,以[beg, end)作为元素初值

建立一个list,以initlist作为初值

建立一个list,以initlist作为初值

l.~list()销毁所有元素,释放内存
l.assign(n, elem);复制n个elem,赋值给l
l.assign(beg, end);将区间[beg,end)内的所有元素赋值给l
l.assign(initlist);

将初值列initlist的所有元素赋值给l

l1.swap(l2);交换l1和l2的数据
swap(l1, l2);交换l1和l2的数据
l.front()返回第一个元素(不检查是否存在)
l.back()返回最后一个元素(不检查是否存在)
l.rbegin()返回反向iterator指向的反向迭代的第一个元素
l.rend()返回反向iterator指向的反向迭代最后一个元素的下一个位置
l.crbegin()返回const iterator反向迭代的第一个元素
l.crend()返回const iterator反向迭代的最后一个元素的下一个位置
l.push_back(elem)附加一个elem到末尾
l.pop_back()移除最后一个元素,但是不返回它
l.push_front(elem)在头部插入elem的一个拷贝
l.pop_front()移除第一个元素,但是不返回它
l.insert(pos, elem)在iterator位置pos之前插入elem,并返回新元素位置
l.insert(pos, n, elem)在iterator位置pos之前插入n个elem,并返回第一个新元素位置
l.insert(pos, beg, end)在iterator位置pos之前插入区间内所有元素,并返回第一个新元素位置
l.insert(pos, initlist)在iterator位置pos之前插入initlist所有元素,并返回第一个新元素位置
l.emplace(pos, args...)在iterator位置pos之前插入一个以args为初值的元素,并返回新元素位置
l.emplace_back(args...)附加一个以args为初值的元素于末尾,不返回任何东西
l.emplace_front(args...)附加一个以args为初值的元素于起点,不返回任何东西
l.erase(pos)移除iterator位置pos上的元素,返回下一个元素位置
l.erase(beg, end)移除区间内的所有元素,返回下一个元素位置
l.remove(val)移除所有值为val 的元素
l.remove_if(op)移除所有“造成op(elem)结果为true”的元素
l.resize(num)将元素量改为num,多出的元素用default构造函数完成初始化
v.resize(num, elem)将元素量改为num,多出的元素用elem初始化
l.unique()如果存在若干相邻和数值相同的元素,就移除重复元素,只保留一个
l.unique(op)如果存在若干相邻元素都使op为真,则移除重复元素,只留一个
l.splice(pos, l2)将l2内的所有元素移动到l内的pos之前
l.splice(pos, l2, l2ops)将l2内的l2pos所指元素转移到l内的pos之前
l.splice(pos, l2, l2beg, l2end)将l2内的 [ l2beg, l2end ] 区间内的所有元素转移到l内的pos之前
l.sort() 以operator<为准则为所有元素排序
l.sort(op)以op为准则对所有元素排序
l.merge(l2)

假设l和l2都包含op准则下以排序元素,将l2的元素移动到l,保证合并后仍然有序

l.merge(l2, op)假设l和l2都包含op准则下以排序元素,将l2的元素移动到l,保证合并后在op准则下仍然有序
l.reverse()将所有元素逆序

参考:《C++标准库》

c++STL之顺序容器(vector、deque、list)分析 c++ vector、deque、list的分析比较 阅读详情

相关推荐

初识c++STL容器中的vector、deque、list(八)

这里有C++STL——全面总结详细教程(附案例解析)(持续更新中) 我们先认识一下vector: 声明 插入 输出 很好理解。 #include<iostream> #include<vector> using namespace std; int main() { std::vector<int> v; for (int i = 0; i...

cfl997 7739

initlist函数c语言,线性表初始化int InitList(LinkList *L)和int InitList(LinkList L)问题...

在数据结构线性表一章,老师讲到,如果要改变变量的值就用指针,不改变就用变量本身,但是在代码中,定义线性表的数据结构如下def.htypedef struct Node{int data;struct Node * next;}Node;typedef struct Node* LinkList;初始化线性表的函数如下:int InitList(LinkList *L){*L = (LinkList...

weixin_39810901的博客 9948

STL及常用容器vector、list和deque的介绍

STL及常用容器vector、list和deque的介绍

dvlinker的技术专栏 2436

Vector标准STL序列容器

1 vector简介vector是序列式容器的一种。所谓序列式容器,其中的元素都可序,但未必有序。vector的数据安排和操作方式与array非常 相似。两者唯一的差别是空间的灵活性。array是静态空间,一开始就需要设定大小,有时不够用,有时候又浪费(旱的旱死,涝的涝死啊)。vector就不同了,吃多少拿多少。2 vector实例化#include &lt;iostream&gt; #inclu...

Airaybaiju的博客 488

【STL详解】STL标准模板库入门 | STL版本 | STL六大组件 | STL优点 | 常用STL容器vector、list和map | STL算法函数 | STL使用异常原因分析与总结

本文详细介绍STL标准模板库相关的内容,包括STL版本、STL六大组件、STL优点、常用的STL容器vector、list与map、提升效率的STL算法函数的使用、STL使用异常常见原因分析与总结等,以供大家参考。

dvlinker的技术专栏 2万+

ARS408毫米波雷达数据解析避坑指南:从硬件连接到Python处理

本文提供了ARS408毫米波雷达从硬件连接到Python数据处理的完整实战指南。针对串口通信不稳定、数据解析错误等常见问题,详细解析了硬件连接方案选择、串口数据高效读取策略、二进制协议解析的位操作技巧,并给出了坐标转换、目标跟踪及实时可视化的代码实现,帮助开发者快速搭建稳定的雷达数据处理流水线。

weixin_29091105的博客 149

C++ vector容器(包含c++11标准)

构造函数 语法:    vector();   vector( size_type num, const TYPE &val );   vector( const vector &from );   vector( input_iterator start, input_iterator end ); C++ Vectors可以使用以下任意一种参数方式构造:  vector

qq_36196684的博客 1316

python爬虫自动下载网页链接

需求分析 今天遇到一个简单的需求,需要下载澳大利亚电力市场NEM日前市场的发电商报价数据(http://nemweb.com.au/Reports/Current/Next_Day_Offer_Energy/),页面观感是这样的: Ctrl + F 一下,看到一共有395个zip链接。于是就想着用python爬虫自动下载。这个网页很简单,没有验证码,甚至不需要登录,因此自动下载的pytho...

da_kao_la的博客 1万+

【STL中容器汇总】map、list、vector等详解

STL中map、vector、list容器的详解

paidaxing_s的博客 1429

从X86到ARM:全面解析服务器CPU架构的演变与未来趋势

本文深入解析了服务器CPU架构从X86到ARM的演变历程与未来趋势。文章从CISC与RISC两种设计哲学切入,分析了X86凭借生态建立的帝国地位及其面临的功耗挑战,并重点阐述了ARM架构凭借其卓越的能效比优势,正从移动端向数据中心市场发起冲击。未来,异构计算、软硬协同与专用芯片将成为服务器CPU发展的核心方向。

gold的博客 1127

XC7Z010-1CLG400C开发板ADC引脚配置全攻略(附完整引脚列表)

本文详细解析了XC7Z010-1CLG400C开发板的ADC引脚配置方法,涵盖XADC模块基础、CLG400封装的引脚布局、硬件设计规范及Vivado工程配置实战。特别提供了完整的引脚列表和性能优化技巧,帮助开发者高效实现模拟信号采集,适用于Zynq-7000系列开发。

weixin_29188043的博客 466

C++ STL之容器介绍(vector、list、set、map)

STL(Standard Template Library)即标准模板库。STL通过使用模板实现了容器和算法的分离,允许程序员编写与类型无关的代码,这正是泛型编程的核心思想。

new9232的博客 1600

Unity3D用c#脚本调用前端javascript函数:H5获取unity - webgl 加载并初始化完成的消息

unity3d发布的Webgl 可以作为静态文件加载到H5页面中,并通过javascript 调用unity内置的C#脚本函数,详见Webgl调用unity api。而往往我们需要知道Webgl ready的消息,本文将给出unity 内部调用javascript函数的方案加以解决。

Bravo 2476

C++ STL容器概述:vector、list、deque使用

本文介绍了C++标准模板库(STL)中三种常用容器:vector、list和deque的特点及使用方法。vector作为动态数组支持随机访问,但扩容有性能开销;list作为双向链表插入删除高效但不支持随机访问;deque兼具双端操作和随机访问功能。文章详细展示了容器的创建、元素插入删除等操作示例,并提醒注意vector的内存预分配和迭代器失效问题。通过掌握这些基础容器,为进一步学习map、set等其他STL容器奠定基础。

fykam的博客 1092

SMILES:化学结构的线性表示方法

SMILES:化学结构的线性表示方法

jasminefeng的博客 1万+

【Linux 驱动开发】STM32MP1 LCD 显示系统完整实践指南

STM32MP1 LCD显示系统实践指南 本文全面介绍STM32MP1平台实现MIPI DSI LCD显示的完整流程,涵盖硬件连接、设备树配置、显示原理和驱动实现。主要内容包括: 硬件连接:详细说明MIPI DSI差分对、背光PWM、复位/供电管脚的连接方式 设备树配置: PWM背光控制节点设置 LTDC与DSI端口映射关系 Panel节点参数定义 显示基础:讲解LCD/OLED显示原理、常见接口类型(RGB/LVDS/MIPI/HDMI)及信号时序 驱动实现。

猫猫的小茶馆 496

STL之序列式容器(Vector/Deque/List)

序列式容器包括:静态数组array、动态数组vector、双端队列deque、单链表forward _list、双链表list。这五个容器中,我们需要讲解三个vector、deque、list的使 用,包括:初始化、遍历、尾部插入与删除、头部插入与删除、任意位置进行插入与 删除、元素的清空、获取元素的个数与容量的大小、元素的交换、获取头部与尾部元素等。

weixin_44664985的博客 1306

黑猫带你学eMMC协议第17篇:超详细的eMMC HS200 & HS400讲解

1 前言 1.1 声明 本文依据eMMC JEDEC5.1及个人工作经验整理而成,如有错误请留言。 本文结合eMMC JEDEC5.1协议手册查看效果更佳。 1.2 内容提要 本文大约6000字,主要内容有: 1.什么是emmc hs200/hs400? 2.什么是tuning?tuning的过程又是什么? 3.如何设置才能让emmc进入hs200 mode? 4.如何设置才能让emmc进入hs400 mode? 5.emmc关于HS200/HS400内部结构框图对比。 6.部分个人相关经验总结。

黑猫奥利奥的博客 1万+

STL序列式容器array、vector、deque、list 和 forward list

STL中array、vector、deque、list 和 forward list

weixin_66455428的博客 908

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

STL之常用容器string、vector、deque、stack、list、set、map讲解

​ 简述: 了解STL之常用容器string、vector、deque、stack、list、set、map讲解书写一个简单地例子。 文章目录本博文的简述or解决问题?容器:大纲如图:知识点讲解:string:vector:内存结构样子:收缩内存技巧:原理图示:![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbn...

1491

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

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

测试项目静态数组动态数组vectorlistdeque初始化★★★★★★★★★★★★★★☆★★★☆☆★★★★☆前向遍历★★★★★★★★★★★★★★☆★★★★☆★★★★☆后向遍历★★★★★★★★★★★★★★☆★★★★☆★★★★☆随机访问★★★★★★★★★★★★★★☆★☆☆☆☆★★★☆☆后端插入N/AN/A★★★★★★★★★☆★★★★★后端移除N/AN/A★★★★★★★★★☆★★★★★前端插入N/AN/A★★☆☆☆。

木牛的博客 723

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

详解C++STL容器系列(二)—— list的详细用法和与vector的对比

目录一、list介绍二、list创建三、list方法对比vector四、list的具体用法4.1 iterators4.2 Capacity4.3 Element access4.4 Modifierspush_front、push_back、emplace_front、emplace_backinsert、emplaceeraseassignswap4.5 list operationsspliceremoveremove_ifuniquesortmergereverse五、list和vector对比参考

aruewds的博客 1890

C++STL顺序容器:vector、deque、list

文章目录一、vector容器1.1使用方式1.2使用实例二、deque容器2.1底层实现2.2使用方式三、list容器四、vector、deque、list对比分析 我们经常提到STL,那么STL究竟是什么呢? STL:其英文全称为standard template libaray,即标准模板库。我们根据需要直接实例化这些模板,提高了我们使用的效率。 一、vector容器 vector:向量容器,...

Rain的博客 945

C++ STL全面解析:六大核心组件之一----序列式容器(vector和List)(STL进阶学习)

vector的数据结构跟array是非常相似的,只不过他们有一点不同,那就是array在定义时会被限制住大小,是静态的容量。而vector则是动态的容量,可以根据插入数据的数量去自动扩容容量。我们不必再去担心初始化数组的时候去定义一个大块头,使用vector时这个顾虑将烟消云散。vector的实现技术关键在于对其大小的控制以及重新分配时数据迁移的效率,一旦vector的空间满载,如果客户端每新增一个元素,vector随之去增加一个元素这种效率肯定是很慢的。所以vector是采用的未雨绸缪机制。

LKHzzzzz的博客 1420
上一篇: 整数序列中最长的连续序列个数(LeetCode-128)
下一篇: STL容器之set、map、unordered_set、unordered_map
蓬莱道人
博客等级 码龄11年 766粉丝 274原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值