C++八股——STL相关

C++的STL(Standard Template Library,标准模板库)包括以下六大主要组件:

容器(Containers):

vector:动态数组,支持随机访问和高效内存管理。
list:双向链表,支持高效插入和删除操作,但不支持随机访问。
deque:双端队列,两端都可以高效地进行插入和删除元素,同时支持随机访问。
stack:后进先出(LIFO)的数据结构,基于容器实现(如通常基于deque或vector)。
queue:先进先出(FIFO)的数据结构,同样基于容器实现。
priority_queue:优先队列,其中元素总是保持排序状态,最高优先级的元素总是在顶部。
set:有序集合,不允许重复元素,内部自动排序。
map:关联数组或键值对集合,键是唯一的且自动排序。
multiset 和 multimap:允许键重复的集合和映射。
迭代器(Iterators):

提供了一种统一的方式来遍历容器中的元素,它们是通用化的指针,可以用来读取或修改容器中的数据,并在不同容器之间提供一种抽象接口。
算法(Algorithms):

一系列函数模板,用于执行常见的数据处理任务,如排序、搜索、计数、复制、填充等,这些算法可以作用于任何满足迭代器要求的容器上。
仿函数(Functors 或 Function Objects):

类似于函数的对象,重载了 () 操作符,可以在算法中用作谓词或其他可调用实体。C++11及以后版本引入了lambda表达式,进一步增强了这一功能。
适配器(Adapters):

将一个容器转换为具有不同接口或行为的容器,例如 stack、queue 和 priority_queue 可以看作是其他容器的适配器,还有 queue adaptor(堆栈适配队列)、heap adaptor(堆)等。
空间配置器(Allocators):

定义了如何分配和管理容器所需的内存,允许程序员自定义内存管理策略以适应特定的应用需求。
这些组件相互配合,提供了灵活而强大的工具集,使得C++程序能够更高效地设计和实现各种数据结构相关的问题解决方案。

c++容器常见函数

vector:

push_back(element):在容器末尾添加元素。
pop_back():删除容器末尾的元素。
insert(iterator, element):在迭代器指定的位置插入元素。
erase(iterator):删除迭代器所指向的元素。
at(index):通过索引随机访问元素(抛出异常如果索引越界)。
[index]:通过索引随机访问元素(不检查边界)。
resize(size):改变容器大小,可能增加或减少元素个数。
clear():清空容器内的所有元素。

list:

push_back(element):在链表末尾添加元素。
push_front(element):在链表头部添加元素。
pop_back():删除链表末尾的元素。
pop_front():删除链表头部的元素。
insert(iterator, element):在迭代器指定位置插入元素。
erase(iterator):删除迭代器指向的元素。
remove(value):移除所有等于给定值的元素。

deque:

同样具有与vector类似的push_back, pop_back, push_front, pop_front, insert, erase等方法。
front() 和 back():分别返回首尾元素的引用。

stack:

push(element):将元素压入栈顶。
pop():弹出并删除栈顶元素。
top():返回栈顶元素但不删除(需要保证栈非空)。

queue:

push(element):在队列尾部添加元素(后进)。
pop():从队列头部删除元素(先进)。
front():返回队列头部元素但不删除(需要保证队列非空)。
priority_queue:

push(element):添加元素到优先队列中,按优先级排序。
pop():删除并返回优先级最高的元素。
top():返回但不删除优先级最高的元素。

set:

insert(element):插入元素,若已存在则不插入。
erase(element/iterator):删除指定元素或由迭代器指向的元素。
find(key):查找特定键值,返回一个迭代器指向找到的元素或end()表示未找到。
count(key):返回键值出现次数(在set中始终为1或0)。

map:

insert({key, value}):插入键值对。
erase(key/iterator):删除特定键对应的项或由迭代器指向的项。
find(key):查找键值,返回一个迭代器指向找到的键值对或end()表示未找到。
operator:获取或插入键对应的值(如果不存在,则插入新键值对)。
multiset/multimap:

除了允许重复键之外,其接口与set/map基本相同,包括insert, erase, find, count等操作。

C++各个容器通用函数

C++ STL容器虽然各有特点,但它们都支持一些共同的基本操作。以下是一些常见的通用函数:

迭代器访问:

begin():返回指向容器第一个元素的迭代器(如果为空则返回end())。
end():返回一个“超尾”迭代器,它指向容器最后一个元素之后的位置。
cbegin() 和 cend():与begin和end类似,但返回的是常量迭代器。

大小和容量:

size():返回容器中元素的数量。
empty():检查容器是否为空。
capacity():在某些容器(如vector, deque)中,返回当前分配的空间可容纳的最大元素数量。

插入操作:

insert(iterator position, const T& value):在指定迭代器位置插入一个元素。
对于顺序容器,如vector、deque、list等还提供其他形式的插入方法,例如插入范围或单个值到容器任意位置。

删除操作:

erase(iterator position):删除迭代器所指向的元素。
erase(iterator first, iterator last):删除从first到last之间的所有元素。
对于栈和队列,通常通过pop系列函数来删除元素(如std::stack::pop、std::queue::pop等)。

查找操作:

由于不同容器内部组织方式各异,查找功能由具体算法实现,如std::find(container.begin(), container.end(), value)用于线性查找。
集合类容器如set、map等,提供了基于键的高效查找,如std::set::find(key)、std::map<K,V>::find(key)。

修改内容:

在允许修改元素的容器中,可以通过迭代器直接修改元素值。
容器变换:

clear():清空容器内的所有元素。

需要注意的是,并非所有容器都支持上述所有操作,比如stack和queue只支持顶部元素的添加和删除操作,不直接支持随机访问或遍历。而像priority_queue则有自己特定的插入(push)和删除最高优先级元素(pop)的方法。同时,关联容器如set、map、multiset、multimap除了共享一些基本概念外,其接口也根据各自特性有所不同。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/619024.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

美国PPI降温影响深远,美易平台展望金融市场新动向

近期&#xff0c;美国生产者价格指数&#xff08;PPI&#xff09;的最新数据显示出超出市场预期的降温迹象&#xff0c;这一变化对全球金融市场产生了深远的影响。据美国劳工部1月12日周五公布的数据&#xff0c;12月份的PPI同比增长1%&#xff0c;不仅低于预期的1.3%&#xff…

HTML5+CSS3+JS小实例:音频可视化

实例:音频可视化 技术栈:HTML+CSS+JS 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><m…

C++学习笔记——私有继承、多重继承、类模板

目录 一、私有继承 二、多重继承 三、类模板 四、一个使用私有继承的示例代码 4.1代码 4.2输出结果 五、多重继承案列 六、类模板案例 C中的继承和模板是非常强大和灵活的特性&#xff0c;它们可以帮助我们实现代码复用、抽象和泛化等目标。本文将着重介绍私有继承、多…

class_1:qt的安装及基本使用方式

一、选择组件&#xff1a; 1、windows编译工具&#xff1a;MinGW 7.30 32-bit MinGW 7.30 64-bit 2、QT源代码&#xff1a;sources 3、QT的绘图模块&#xff1a;QT charts 4、QT虚拟键盘&#xff1a;QT Virtual Keyboard 5、QT Creational 4.12.2 GDB 二、新建QT项目 文…

Linux完全卸载Anaconda3和MiniConda3

如何安装Anaconda3和MiniConda3请看这篇文章&#xff1a; 安装Anaconda3和MiniConda3_minianaconda3-CSDN博客文章浏览阅读474次。MiniConda3官方版是一款优秀的Python环境管理软件。MiniConda3最新版只包含conda及其依赖项如果您更愿意拥有conda以及超过720个开源软件包&…

高通平台开发系列讲解(USB篇)adb function代码分析

文章目录 一、FFS相关动态打印二、代码入口三、ffs_alloc_inst四、ep0、ep1&ep2的注册五、读写过程沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本文主要介绍高通平台USB adb function代码f_fs.c。 一、FFS相关动态打印 目录:msm-4.14/drivers/usb/gadget/fun…

docker+jmeter实现windows作为主控机,linux作为负载机的分布式压测环境搭建

dockerjmeter实现windows作为主控机&#xff0c;linux作为负载机的分布式压测环境搭建 1、搭建环境说明2、windows主控机安装Jmeter3、linux负载机安装Jmeter3.1、安装docker环境3.2、使用docker安装jmeter 4、windows主控机分发测试任务 1、搭建环境说明 准备一台windows主机…

Linux: module: kheaders;CONFIG_IKHEADERS

文章目录 参考错误开一个玩笑。configcommit参考 https://github.com/iovisor/bcc/pull/2312 https://github.com/iovisor/bcc/pull/3588 https://bugs.gentoo.org/809347 https://lore.kernel.org/lkml/20190408212855.233198-1-joel@joelfernandes.org/ 错误 <built-in…

时间序列数据库选型: influxdb; netdiscover列出docker实例们的ip,docker管理工具lazydocker、scope

influxdb influxdb: 有收费版本、有开源版本 influxdb 安装、启动(docker) docker run -itd --name influxdb-dev -p 8086:8086 influxdb #influxdb的web客户端(端口8003)被去掉了 #8006是web-service端口#docker exec -it influxdb-dev bashinfluxdb 自带web界面 从后面的…

Rust-函数

简介 Rust的函数使用关键字fn开头。 函数可以有一系列的输入参数&#xff0c;还有一个返回类型。 函数体包含一系列的语句(或者表达式)。 函数返回可以使用return语句&#xff0c;也可以使用表达式。 Rust编写的可执行程序的入口就是fn main()函数。 以下是一个函数的示例…

复试 || 就业day15(2024.01.13)算法篇

文章目录 前言数组中第 K 个独一无二的字符串统计字符串中的元音子字符串检查两个字符串是否几乎相等统计出现过一次的公共字符串找出 3 位偶数找到和最大的长度为 K 的子序列 前言 &#x1f4ab;你好&#xff0c;我是辰chen&#xff0c;本文旨在准备考研复试或就业 &#x1f4…

Jenkins入门知识:什么是Jenkins?以及它的历史与发展

Jenkins是一个开源的自动化服务器。借助Jenkins&#xff0c;团队可以通过自动化来加速软件开发过程。Jenkins管理和控制整个生命周期中的软件交付过程&#xff0c;包括构建、文档、测试、打包、阶段、部署、静态代码分析等。 您可以设置Jenkins来监控GitHub、Bitbucket或GitLa…

openssl3.2 - 官方demo学习 - cms - cms_enc.c

文章目录 openssl3.2 - 官方demo学习 - cms - cms_enc.c概述笔记END openssl3.2 - 官方demo学习 - cms - cms_enc.c 概述 用证书对明文进行CMS加密 CMS操作过的最终内容(除了反操作(解压缩, 解密))都是可见字符(数据用base64过了一遍). 笔记 /*! \file cms_enc.c * \note o…

代码随想录算法训练营第四天 |24.两两交换链表中的节点,19.删除链表的倒数第N个节点,面试题02.07.链表相交,142、环形链表II

链表基础 1、链表定义&#xff1a; &#xff08;1&#xff09;链表是一种通过指针串联在一起的线性结构&#xff0c;每一个节点由两部分组成&#xff0c;一个是数据域一个是指针域&#xff08;存放指向下一个节点的指针&#xff09;&#xff0c;最后一个节点的指针域指向null…

JavaScript高级程序设计读书记录(十三):期约与异步函数

ECMAScript 6 及之后的几个版本逐步加大了对异步编程机制的支持&#xff0c;提供了令人眼前一亮的新特性。ECMAScript 6 新增了正式的 Promise&#xff08;期约&#xff09;引用类型&#xff0c;支持优雅地定义和组织异步逻辑。接下来几个版本增加了使用 async 和 await 关键字…

C++核心编程——文件操作

本专栏记录C学习过程包括C基础以及数据结构和算法&#xff0c;其中第一部分计划时间一个月&#xff0c;主要跟着黑马视频教程&#xff0c;学习路线如下&#xff0c;不定时更新&#xff0c;欢迎关注。 当前章节处于&#xff1a; ---------第1阶段-C基础入门 ---------第2阶段实战…

ROS无人机开发常见错误

一. Ubuntu 相关 1、SSH远程连接报错 解决方案&#xff1a;终端运行上述图中选中部分&#xff0c;更新一下即可 第一步&#xff1a; 第二步&#xff1a;根据提示输入yes后输入密码即可 第三步&#xff1a;成功后如下图所示 2、解决“E 无法获得锁/ var/lib/apt/lists/ (11 资…

Altium Desigenr 孔 规则修改2

1、过孔修改 在这里插入图片描述 2、物理孔

[足式机器人]Part2 Dr. CAN学习笔记-Advanced控制理论 Ch04-7 LQR控制器 Linear Quadratic Regulator

本文仅供学习使用 本文参考&#xff1a; B站&#xff1a;DR_CAN Dr. CAN学习笔记-Advanced控制理论 Ch04-7 LQR控制器 Linear Quadratic Regulator 线性控制器设计-轨迹跟踪&#xff08;Fellow a Desired Path&#xff09;

如何使用 Helm 在 K8s 上集成 Prometheus 和 Grafana|Part 2

在 Part 1 中&#xff0c;我们一起了解了什么是 Prometheus 和 Grafana&#xff0c;以及使用这些工具的前提条件和优势。在本部分&#xff0c;将继续带您学习如何安装 Helm 以及如何使用 Prometheus Helm Charts。 开始使用 Helm 和 Helm Chart ArtifactHub 为 Helm Chart 提供…