一文带你了解C++STL

c++stl之反向迭代器用法及注意事项!!! 反向迭代器 1.定义: 在容器中从尾元素向首元素反向移动的迭代器 对于反向迭代器,递增和递减的含义会颠倒过来 递增一个反向迭代器会移动到前一个元素 递减一个迭代器会移动到下一个元素 注意:除了forward_list容器之外,其他容器都支持反向迭代器 2.使用反向迭代器的相关函数 rbegin() —指向容器尾元素 rend()—指向容器首元素之前一个位置 crbegin() crend() 下面两个c开头的是反向迭代器的const版本,即不能修改迭代器指向位置的值 3.反向迭代器与 阅读详情

目录

一、顺序和关联容器共同支持的成员函数

二、vector

  1. vector的构造

  2. 赋值操作

  3. 直接访问向量元素

  4. vector向量的常用操作

二、list

  1. 链表的构造(模板参数T是链表的数据类型)

  2. 链表赋值

  3. 链表存取

  4. 链表插入和删除

  5. 链表的特殊操作

三、stack

主要操作

一、顺序和关联容器共同支持的成员函数

begin() 指向第一个元素

end() 指向最后一个元素

erase() 删除容器中的一个或多个元素

rbegin() 指向按反顺序的第一个元素

rend() 指向按反顺序的末端位置

clear() 删除容器中的所有元素

二、vector

向量容器,类似于动态数组,比数组灵活

  1. vector的构造

1 1vector c //产生一个空vector,其中没有任何元素

2 vector c1(c2) //产生同型c2向量的一个复本(c2所有元素被复制给c1)

3 vector c(n,elem) //产生大小为n的向量c,且每个元素都是elem

4 vector c(beg,end) //产生一个向量,并用区间[beg,end]作为元素的初值

  1. 赋值操作

1 c1=c2 //将向量c2的元素全部赋值给c1

2 c.assign(n,e) //复制n个元素e,赋值给向量c

3 c.assign(beg,end) //将区间[beg,end]内的元素赋值给c

4 c1.swap(c2) //将c1与c2向量互换

  1. 直接访问向量元素

1 c.at[n] //返回下标n所标识的元素,若下标越界,返 回“out_of_range”

2 c[n] //返回下标n所标识的元素,不进行范围检查

3 c.front() //返回第一个元素

4 c.back() //返回最后一个元素

  1. vector向量的常用操作

1 c.insert(pos,e) //在pos位置插入e的副本,并返回新元素的位置

2 c.insert(pos,n,e) //在pos位置插入e的n个副本,不返回值

3 c.insert(pos,beg,end) //在pos位置插入区间[beg,end]内的所有元素

4 c.push_back(e) //在尾部插入元素e

5 c.push_back() //删除最后一个元素

6 c.erase(pos) //删除pos位置的元素

7 c.erase(beg,end) //删除区间[beg,end]内的所有元素

8 c.clear() //删除所有元素,清空容器

9 c.size() //返回向量c中的元素个数

10 c.resize(n) //将c重新设置为大小为n个元素的向量,如果n比原来的元素多,则多出的元素常被初始化为0

上述成员函数参数中涉及的位置pos都与vector的迭代器有关,要操作这些成员函数,必须定义对应向量的迭代器,并通过迭代器访问pos指向的向量元素

二、list

双向链表,可以从头到尾或从尾到头访问链表中的节点,节点可以是任意数据类型。链表中节点的访问常常通过迭代器进行。

  1. 链表的构造(模板参数T是链表的数据类型)

1 list c //建立一个空链表c

2 list c1(c2) //建立与c2同型的链表c1(c2的每个元素都被复制)

3 list c(n) //建立具有n个元素的链表c,元素值由默认构造函数产生

4 list c(n,e) //建立n个元素的链表c,每个元素的值都是e

5 list c(beg, end) //建立链表c,并用[beg, end]区间内的元素作初始化

6 c.~list() //销毁链表c,释放内存

  1. 链表赋值

1 c1=c2 //将c2链表的全部元素赋值给c1链表

2 c1.assign(n,e) //将元素e拷贝n次到c1链表

3 c.assign(beg,end) //将区间[beg,end]的元素赋值给c

4 c1.swap(c2) //将链表c1和c2的全部元素互换

  1. 链表存取

1 c.front() //返回第一个元素,不检查元素存在与否

2 c.back() //返回最后一个元素,不检查元素存在与否

  1. 链表插入和删除

1 c.insert(pos,e) //在pos位置插入元素e的副本,并返回新元素的位置

2 c.insert(pos,n,e) //在pos位置插入元素e的n个副本,没有返回值

3 c.insert(pos, beg, end) //在pos位置插入区间[ bed, end]内的全部元素

4 c.push_back(e) //在尾部追加一个元素e的副本

5 c.pop_back(e) //删除最后一个元素

6 c.push_front(e) //在表头插入元素e的一个副本

7 c.pop_front() //删除第一个元素

8 c.remove(val) //删除值为val的元素

9 c.remove_if(op) //删除所有“造成op(e)结果为true”的元素

10 c.erase(pos) //删除pos指向的元素,返回下一元素的位置

11 c.erase(beg, end) //删除区间[beg,end]内的元素,返回下一元素位置

12 c.resize(n) //将链表c的大小重新设置为n

13 c.clear() //删除链表所有元素,将整个容器置空

  1. 链表的特殊操作

1 c.unique() //删除相邻重复元素,只留一个

2 c.unique(op) //若存在若干相邻且使op()操作为true的元素,删除重复,只留一个

3 c1.splice(pos, c2) //将c2内的所有元素转换到c1内,pos之前

4 c1.splice(pos, c2, c2pos) //将c2链表的c2pos所指元素移到c1内的pos指向的位置

5 c1.splice(pos, c2, c2beg, c2end) //将c2内[c2beg, c2end]区间的所有元素转换到c1 内pos之前

6 c.sort() //以operator<为准则,对所有元素排序

7 c.sort(op) //以op()为准则,对所有元素排序

8 c1.merge(c2) //c2合并到c1,若合并前有序则合后仍有序

9 c.reverse() //将所有元素反序

三、stack

堆栈是一种较简单的容器,是一种受限制的向量,只允许在一端存取变量

LIFO(Last in first out)

主要操作

push() //将第一个元素加入stack内,加入的元素放在栈顶

top() //返回栈顶元素元素值

pop() //删除栈顶元素

**关注我,带你遨游代码世界!

私信回复 “资料” 获取更多**

一文了解C++的STL C++ 的STL(Standard Template Library,标准模板库) 是 C++ 标准库的核心组成部分,基于模板(Template) 实现,提供了一套通用、高效、可复用的数据结构(容器)和算法,旨在简化开发、提高代码效率和可维护性。其设计遵循 “泛型编程” 思想,即代码与具体数据类型解耦,可适配任意类型(如int、string、自定义类等)。 阅读详情

相关推荐

ROS-订阅与处理激光雷达scan话题

激光雷达通常有四个性能衡量指标:测距分辨率、扫描频率(有时也用扫描周期)、角度分辨率及可视范围。测距分辨率衡量在一个给定的距离下测距的精确程度,通常与距离真实值相差在5-20mm;扫描频率衡量激光雷达完成一次完整扫描的快慢,通常在10Hz及以上;角度分辨率直接决定激光雷达一次完整扫描能返回多少个样本点;可视范围指激光雷达完整扫描的广角,可视范围之外即为盲区。

weixin_42438635的博客 4477

C++学习笔记 —— STL之list(链表)

https://www.cnblogs.com/scandy-yuan/archive/2013/01/08/2851324.html 实际上,list容器就是一个双向链表,可以高效地进行插入删除元素。O(1)复杂度 #include <iostream> #include <list> #include <vector> #include <algorithm> // g++ -std=c++11 list.cc -o test && tes

Charles Ren's Tech Blog 1461

Python RPA 流程自动化快速上手

Python RPA 流程自动化快速上手

看花容易绣花难 1万+

c++基础知识——STL之链表

STLzhi链表,想学习c++ 的朋友可以看过来了,带你学会c++中的链表;

qq_59931372的博客 1万+

Crush 终端 LLM 工具安装与使用指南:把 AI 编程助手装进你的命令行

喜欢命令行的开发者需要离线/轻量级 AI 助手的场景希望自定义模型与工具链的高级用户通过LSP + MCP + 多模型支持,Crush 不仅能写代码,还能理解项目、调用工具、连接服务,真正成为你的“终端编程搭档”。

weixin_44058951的博客 1616

数控弯管机xyz转换ybc的算法_花了一年时间开发的三维弯管机交互式转档软件(三维管子模型UG,SOLIDWORK,PRO/E文件转成YBC)...

在弯管机加工中,由管子模型生成可直接进行弯管加工的YBC数据可以大大提高弯管编程过程.传统的做法是先用dxf数据文件(用autocad绘制管子的轴心线数据)转出XYZ数据,然后由XYZ数据转成YBC数据,而且大部分厂家对文件版本以及软件做管方式都有不少限制,这大大花费了用户的时间跟精力.随着企业的信息化管理以及不断的技术升级,传统用autocad线条模式来描述管子的方式正在被用户用PRO/E,UG...

weixin_29065959的博客 1961

C++ STL详解超全总结(快速入门STL)

C++STL合集,包含vector,stack,queue,map,set,array,tuple,deque,priority_queue等诸多内容,全文上万字。

行码棋 30万+

OpenEarthMap 与 xBD 数据集合并

整合好的数据:链接: https://pan.baidu.com/s/1uJ_Zg6n-s3u1D49OW52D7Q?pwd=2vwx 提取码: 2vwx完整整合步骤与代码如下。

qq_60293814的博客 1594

vector.rend_vector :: rend()函数以及C ++ STL中的示例

vector.rend C ++ vector :: rend()函数 (C++ vector::rend() function) vector::rend() is a library function of "vector" header, it is used to get the first element of a vector using reverse_iterator, it re...

cumtv80668的专栏 1879

量子密钥分发系统设计与实现(一):系统基本架构讨论

本文主要对量子密钥分发系统中的基础架构和基于系统的量子密钥协商过程进行了初步讨论,为后期系列文章进行铺垫。

量子领域相关话题 3893

把冷门数据从内存里请出去:ABAP 环境下玩转 SAP HANA Native Storage Extension (NSE) 的开发者实战笔记

摘要:SAP HANA NSE技术为ABAP系统提供了一种经济高效的温数据管理方案。文章首先指出企业数据存在"温度分层"现象,高频访问的热数据需常驻内存,而低频温数据更适合存储在磁盘或闪存。NSE通过混合列存架构,将不常访问的数据移至磁盘但仍保持数据库内统一管理,显著降低内存成本。 关键实施要点包括:在ADT技术设置中将Load Unit设为"Page Enforced"以启用NSE;理解buffer cache作为数据"抽屉"的工作原理;掌握选表

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 161

C++中STL常用容器(vector、deque、list、map、set)一文带你了解

一、vector容器(向量) vector属于序列容器,序列是对基本容器的一种改进,在保持其基础功能上增加一些我们需要的更为方便的功能。要求序列的元素必须是严格的线性顺序排序。因此序列中的元素具有确定的顺序,可以执行将值插入到特定位置、删除特定区间等操作。下面要说明的deque、list同样属于序列(也叫顺序)容器。vector是动态数组,在内存中具有连续的存储空间,支持快速随机访问。由于具有连续的存储空间,所以在插入和删除操作方面,效率比较慢。 /* * @Author: Stylle * @Date

凉开水白菜的博客 1645

PyTorch强化学习实战(1)——强化学习(Reinforcement Learning,RL)详解

在本节中,开始进入探索强化学习 (Reinforcement Learning, RL) 之旅,首先剖析了强化学习的独特之处及其与监督学习、无监督学习范式的关系。随后系统学习了强化学习的基础形式化框架及其内部关联机制,并深入讲解了马尔可夫过程 (Markov Process, MP)、马尔可夫奖励过程 (Markov Reward Process, MRP) 和马尔可夫决策过程 (Markov Decision Process, MDP),为后续学习奠定基础。

盼小辉丶的博客 2050

【C++ • STL】一文带你走进string

STL简介、string的常用接口:常见构造、容量操作、访问及遍历操作、修改、非成员函数等

m0_57388581的博客 1491

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

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

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

一文带你轻松入门STL

学习STL的意义 STL即Standard Template Library(标准模板库),是C++的一部分 (C++ = C + 类 + 模板(STL), C++编译器都支持STL,不需要单独安装),不会STL不算C++程序员。 STL里面封装了很多经典的算法,再加上是基于模板的,适用于多种数据类型,某种程度上说是通用算法,所以 它在C++中的地位很高。 入门STL的痛点 1. 看书入门STL 像 《C++ primer plus》 这类书侧重于对语言语法知识的讲解,没有系统、全面讲解STL的具体用法、

Quan的博客 2279

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

C++ STL begin()和end()函数(深入了解,一文学会)

C++ STL标准库提供的所有容器做了系统的讲解。无论是序列式容器还是关联式容器(包括哈希容器),不仅模板类内部提供有 begin() 和 end() 成员方法,C++ STL 标准库中还提供有同名且具有相同功能的begin() 和 end() 函数。 首先需要说明的是,begin() 和 end() 是以函数模板的形式定义的,但它们的模板并没有位于某一个头文件中,而是很多头文件中都有它们的定义。 C++ STL 标准库中,包含 begin() 和 end() 函数模板的头文件包括:...

断点 2万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【C++之STL】一文学会使用 string

1. STL导读 1. 1 什么是STL 1. 2 STL的版本 1. 3 STL六大组件 1. 4 STL的重要性 1. 5 STL的学习 1. 6 STL系列博客的规划 2. string 2. 1 为什么学习string类? 2. 2 标准库中的string 2. 3 基本构造 2. 4 尾插与输出运算符重载 2. 5 构造函数 2. 6 赋值运算符重载 2. 7 容量操作 2. 8 元素访问 2. 9 迭代器 2. 10 修改 2. 11 字符串操作 2. 12 不在类中的函数重载 3. 尾声

fhvyxyci的博客 2504

C++ STL Set容器(深入了解,一文学会)

和 map、multimap 容器不同,使用 set 容器存储的各个键值对,要求键 key 和值 value 必须相等。 通过前面的学习我们知道,map、multimap 容器都会自行根据键的大小对存储的键值对进行排序,set 容器也会如此,只不过 set 容器中各键值对的键 key 和值 value 是相等的,根据 key 排序,也就等价为根据 value 排序。 另外,使用 set 容器存储的各个元素的值必须各不相同。更重要的是,从语法上讲 set 容器...

断点 9376

C++ STL prev()和next()函数(深入了解,一文学会)

《C++ STL advance()函数(深入了解,一文学会)》一节中,详细讲解了 advance() 函数的功能,其可以将指定迭代器前移或后移 n 个位置的距离。 1 advance() 函数移动的是源迭代器 但值得一提的是,advance() 函数移动的是源迭代器,举个例子: #include <iostream> // std::cout #include <iterator> // std::advance #include &lt...

断点 1万+

C++ STL advance()函数(深入了解,一文学会)

advance() 函数用于将迭代器前进(或者后退)指定长度的距离。 template <class InputIterator, class Distance> void advance (InputIterator& it, Distance n); 其中 it 指的是目标迭代器,n 通常为一个整数。 需要注意的是,如果 it 为输入迭代器或者前向迭代器,则 n 必须为一个正数,即表示将 it 右移(前进) n 个位置;反之,如果 it 为双向迭代器或...

断点 8129

C++ STL distance()函数(深入了解,一文学会)

我们知道,作用于同一容器的 2 个同类型迭代器可以有效指定一个区间范围。在此基础上,如果想获取该指定范围内包含元素的个数,就可以借助distance()函数。 distance() 函数用于计算两个迭代器表示的范围内包含元素的个数,其语法格式如下: template<class InputIterator> typename iterator_traits<InputIterator>::difference_type distance (InputIte...

断点 2262

C++ STL list容器(深入了解,一文学会)

list 容器,又称双向链表容器,即该容器的底层是以双向链表的形式实现的。这意味着,list 容器中的元素可以分散存储在内存空间里,而不是必须存储在一整块连续的内存空间中。 list 容器中各个元素的前后顺序是靠指针来维系的,每个元素都配备了 2 个指针,分别指向它的前一个元素和后一个元素。其中第一个元素的前向指针总为 null,因为它前面没有元素;同样,尾部元素的后向指针也总为 null。 基于这样的存储结构,list 容器具有一些其它容器(array、...

断点 1804

C++ STL 容器、迭代器、适配器(深入了解,一文学会)

什么是STL? STL,即标准模板库。高效的C++程序库。因为在各类C++ 项目中STL库都在广泛应用,包括作者在开发项目和对接第三方SDK、API的时候,尤其是封装过程中、接口、数据传输过程中都离不开STL模板的存在。vector、deque、list、forward_list、array、map/multimap、set/multiset。 尤其是经常处理涉及万级别以上的数据量的时候传统的string int char 等数组,远远没有容器的处理效率以及不同的序列式容器...

断点 2427

C++ STL unordered_map容器(深入了解,一文学会)

iterator erase ( const_iterator position );unordered_map 无序map容器,正常map容器是有序的会自动执行排序功能,由于 unordered_map 容器底层采用的是哈希表存储结构,该结构本身不具有对数据的排序功能,所以此容器内部不会自行对存储的键值对进行排序。 本文作者原创,转载请附上文章出处与本文链接。 1 unordered_map容器 ...

断点 9270

C++ STL unordered_set容器(深入了解,一文学会)

unordered_set 容器,可直译为“无序 set 容器”,即 unordered_set 容器和 set 容器很像,唯一的区别就在于 set 容器会自行对存储的数据进行排序,而 unordered_set 容器不会。 总的来说,unordered_set 容器具有以下几个特性: 不再以键值对的形式存储数据,而是直接存储数据的值; 容器内部存储的各个元素的值都互不相等,且不能被修改。 不会对内部存储的数据进行排序(这和该容器底层采用哈希表结构存储数据有关; 对于 unorde...

断点 9024

C++ STL vector容器(深入了解,一文学会)

vector 的底层为顺序表(数组)。vector<T> (泛型) 容器是包含 T 类型元素的序列容器,和 array<T,N> 容器相似,不同的是 vector<T> 容器的大小可以自动增长,从而可以包含任意数量的元素;因此类型参数 T 不再需要模板参数 N。只要元素个数超出 vector 当前容量,就会自动分配更多的空间。只能在容器尾部高效地删除或添加元素。 vector<T> 容器可以方便、灵活地代替数组。在大多数时候,都...

断点 1804
上一篇: 一次 SQL 查询优化原理分析(900W+ 数据,从 17s 到 300ms)
下一篇: 如何找一个程序员做男朋友?
程序媛月下
博客等级 码龄7年 5262粉丝 462原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值