C++ 常见容器获取头元素的方法全览
在C++编程中,容器是存储和管理数据集合的重要工具。不同的容器提供了不同的接口来访问和操作其中的元素。获取容器的头元素(即第一个元素)是常见的操作之一。本文将详细列举C++标准库中所有常见容器获取头元素的方法,并对每种方法进行简要说明。
一、std::vector
std::vector
是一个动态数组,它允许快速随机访问元素。要获取std::vector
的头元素,可以使用索引或迭代器。
通过索引访问:
std::vector<int> vec = {1, 2, 3, 4, 5};
int head = vec[0]; // 获取头元素,即第一个元素
通过迭代器访问:
std::vector<int> vec = {1, 2, 3, 4, 5};
int head = *vec.begin(); // 获取头元素,begin() 返回指向第一个元素的迭代器
二、std::list
std::list
是一个双向链表,它允许在容器的任意位置进行高效的插入和删除操作。要获取std::list
的头元素,只能使用迭代器。
通过迭代器访问:
std::list<int> lst = {1, 2, 3, 4, 5};
int head = *lst.begin(); // 获取头元素,begin() 返回指向第一个元素的迭代器
std::list
不支持通过索引访问元素,因为链表的内存布局不是连续的。
三、std::deque
std::deque
是一个双端队列,它允许在容器的两端进行高效的插入和删除操作。与std::vector
类似,std::deque
也支持通过索引和迭代器访问元素。
通过索引访问(仅在支持随机访问的编译器实现中可用,但标准并未强制要求):
std::deque<int> deq = {1, 2, 3, 4, 5};
int head = deq[0]; // 获取头元素,注意这并非标准强制的行为
通过迭代器访问(推荐方式):
std::deque<int> deq = {1, 2, 3, 4, 5};
int head = *deq.begin(); // 获取头元素,begin() 返回指向第一个元素的迭代器
四、std::forward_list
std::forward_list
是一个单向链表,它只允许单向遍历。要获取std::forward_list
的头元素,同样只能使用迭代器。
通过迭代器访问:
std::forward_list<int> flst = {1, 2, 3, 4, 5};
int head = *flst.before_begin().next(); // 获取头元素,before_begin() 返回指向第一个元素之前的迭代器,然后调用 next()
注意,std::forward_list
的迭代器是单向的,且不支持--
操作符,因此访问头元素稍微有些特殊。
五、std::set
和 std::multiset
std::set
和std::multiset
是基于红黑树的有序集合。它们不允许重复元素(multiset
允许重复键但值仍需唯一)。要获取这些容器的头元素,可以使用迭代器。
通过迭代器访问:
std::set<int> s = {1, 2, 3, 4, 5};
int head = *s.begin(); // 获取头元素,即最小的元素
对于std::multiset
,操作是相同的。
六、std::map
和 std::multimap
std::map
和std::multimap
是基于红黑树的关联容器,它们存储键值对。要获取这些容器的头元素的键或值,可以使用迭代器。
通过迭代器访问键:
std::map<int, std::string> m = {{1, "one"}, {2, "two"}, {3, "three"}};
int head_key = m.begin()->first; // 获取头元素的键
通过迭代器访问值:
std::string head_value = m.begin()->second; // 获取头元素的值
对于std::multimap
,操作是相同的,但请注意,由于multimap
允许重复键,因此头元素可能不是唯一的。
七、std::unordered_set
和 std::unordered_multiset
std::unordered_set
和std::unordered_multiset
是基于哈希表的无序集合。它们同样不允许重复元素(unordered_multiset
允许重复元素)。要获取这些容器的头元素,可以使用迭代器。
通过迭代器访问:
std::unordered_set<int> us = {1, 2, 3, 4, 5};
int head = *us.begin(); // 获取头元素,但不一定是插入顺序的第一个元素
对于std::unordered_multiset
,操作是相同的。
八、std::unordered_map
和 std::unordered_multimap
std::unordered_map
和std::unordered_multimap
是基于哈希表的无序关联容器。它们存储键值对。要获取这些容器的头元素的键或值,可以使用迭代器。
通过迭代器访问键:
std::unordered_map<int, std::string> um = {{1, "one"}, {2, "two"}, {3, "three"}};
int head_key = um.begin()->first; // 获取头元素的键
通过迭代器访问值:
std::string head_value = um.begin()->second; // 获取头元素的值
对于std::unordered_multimap
,操作是相同的,但同样请注意,由于unordered_multimap
允许重复键,因此头元素可能不是唯一的。
九、std::stack
std::stack
是一个适配器,它基于其他容器(如std::deque
或std::vector
)实现栈的功能。要获取std::stack
的头元素(即栈顶元素),可以使用top()
方法。
通过top()
方法访问:
std::stack<int> stk = {1, 2, 3, 4, 5};
int head = stk.top(); // 获取头元素,即栈顶元素
十、std::queue
std::queue
也是一个适配器,它基于其他容器(如std::deque
)实现队列的功能。要获取std::queue
的头元素(即队首元素),可以使用front()
方法。
通过front()
方法访问:
std::queue<int> q = {1, 2, 3, 4, 5};
int head = q.front(); // 获取头元素,即队首元素
std::queue
没有top()
方法,这是std::stack
特有的。
十一、std::priority_queue
std::priority_queue
是一个适配器,它基于其他容器(如std::vector
)实现优先队列的功能。要获取std::priority_queue
的头元素(即具有最高优先级的元素),可以使用top()
方法。
通过top()
方法访问:
std::priority_queue<int> pq = {1, 2, 3, 4, 5};
int head = pq.top(); // 获取头元素,即具有最高优先级的元素
总结
在C++标准库中,不同的容器提供了不同的接口来访问它们的头元素。对于序列容器(如std::vector
、std::list
、std::deque
等),通常使用索引或迭代器来访问头元素。对于关联容器(如std::set
、std::map
等)和无序关联容器(如std::unordered_set
、std::unordered_map
等),则使用迭代器来访问头元素。对于栈(std::stack
)和优先队列(std::priority_queue
),使用top()
方法来获取头元素。而对于队列(std::queue
),则使用front()
方法来获取头元素。
了解这些容器如何访问头元素是掌握C++标准库的重要一步,它将帮助你更有效地编写和调试C++程序。
相关文章:
C++ 常见容器获取头元素的方法全览
在C编程中,容器是存储和管理数据集合的重要工具。不同的容器提供了不同的接口来访问和操作其中的元素。获取容器的头元素(即第一个元素)是常见的操作之一。本文将详细列举C标准库中所有常见容器获取头元素的方法,并对每种方法进行…...
Java putIfAbsent() 详解
Java putIfAbsent() 方法详解 在 Java 中,putIfAbsent() 是 Map 接口中的一个方法,从 Java 8 开始引入。它用于向映射中添加一个键值对,只有在该键尚未存在时才进行添加操作。如果键已存在,则不会覆盖原有值。 1. 方法定义 方法…...
使用PSpice进行第一个电路的仿真
1、单击【开始】菜单,选择【OrCAD Capture CIS Lite】。 2、单击【File】>【New】>【Project】。 3、①填入Name下面的文本框(提示:项目名称不要出现汉字); ②选择【Analog or Mixed A/D】; ③单击【…...
路漫漫其修远兮,吾将上下而求索---第一次使用github的过程记录和个人感受
文章目录 1.仓库位置2.新建仓库3.配置仓库4.克隆和上传5.推荐文章和我的感受 1.仓库位置 这个仓库的位置就是在我们的这个个人主页的右上角;如果是第一次注册账号的话,这个主页里面肯定是不存在仓库的,需要我们自己手动的进行创建࿱…...
【微软:多模态基础模型】(4)统一视觉模型
欢迎关注[【youcans的AGI学习笔记】](https://blog.csdn.net/youcans/category_12244543.html)原创作品 【微软:多模态基础模型】(1)从专家到通用助手 【微软:多模态基础模型】(2)视觉理解 【微…...
GRS码(Generalized Reed-Solomon Code)
定义: 令 k ≤ n ≤ q k\le n\le q k≤n≤q, α ∈ F q n \alpha\in\mathbb{F}_q^n α∈Fqn是n元组( α ( α 1 , . . . , α n ) , α i ≠ α j , ∀ i ≠ j ∈ { 1 , . . . , n } \alpha(\alpha_1,...,\alpha_n),\alpha_i\ne \alpha_j,…...
三、谷粒商城- Spring Cloud Alibaba(3)
🌻🌻 目录 🌻🌻 一、SpringCloud Alibaba1.1、SpringCloud Alibaba 简介1.2、SpringCloud Alibaba-Nacos[作为注册中心]1.2.1 将微服务注册到 nacos 中1.2.2 服务注册到 nacos,远程调用 1.3、SpringCloud Alibaba-Naco…...
MATLAB和Python激发光谱
激发光谱是一种用于研究物质发光特性的分析方法。当样品吸收特定波长的光时,电子从基态跃迁至激发态。随后,当电子返回基态时,会发射出光子,产生荧光或磷光。激发光谱通过测量不同波长的入射光激发下的发光强度来获取数据。该技术…...
学习笔记024——Ubuntu 安装 Redis遇到相关问题
目录 1、更新APT存储库缓存: 2、apt安装Redis: 3、如何查看检查 Redis版本: 4、配置文件相关设置: 5、重启服务,配置生效: 6、查看服务状态: 1、更新APT存储库缓存: sudo apt…...
UE5 腿部IK 解决方案 footplacement
UE5系列文章目录 文章目录 UE5系列文章目录前言一、FootPlacement 是什么?二、具体实现 前言 在Unreal Engine 5 (UE5) 中,腿部IK(Inverse Kinematics,逆向运动学)是一个重要的动画技术,用于实现角色脚部准…...
北航软件算法C4--图部分
C4上级图部分 TOPO!步骤代码段TOPO排序部分 完整代码 简单的图图题目描述输入输出样例步骤代码段开辟vector容器作为dist二维数组初始化调用Floyd算法查询 完整代码 负环题目描述输入输出样例步骤代码段全局变量定义spfa1函数用于判断是否有负环spfa2用于记录每个点到1号点的距…...
PCL点云开发-解决在Qt中嵌入点云窗口出现的一闪而过的黑窗口
PCL点云开发-解决在Qt中嵌入点云窗口出现的一闪而过的黑窗口 众所周知,在windows下开发PCL点云最快的方式就是到官网下载其预编译好的库,比如: PCL-1.14.0-AllInOne-msvc2022-win64.exe 这时候你到网络上搜索,大概率会有两种方案…...
本地音乐服务器(二)
4. 上传音乐模块设计 4.1 上传音乐的接口设计 请求和响应设计: 新建music实体类: Data public class Music {private int id;private String title;private String singer;private String time;private String url;private int userid; } 4.2 创建Mu…...
第三十六篇——伯努利试验:到底如何理解随机性?
目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么? 四、总结五、升华 一、背景介绍 概率论指导着我们对于直觉不靠谱的事情,以及为我们如何更高效…...
【Android、IOS、Flutter、鸿蒙、ReactNative 】屏幕适配
Android Java 屏幕适配 参考 今日头条适配依赖配置 添加设计屏幕尺寸 设置字体大小 通过切换不同屏幕尺寸查看字体大小 设置文本宽高 通过切换不同屏幕尺寸查看文本宽高 Android Compose 屏幕适配 <...
candence : 如何利用EXCEL 绘制复杂、多管脚元件
如何利用EXCEL 绘制复杂、多管脚元件 前面的步骤直接略过 我们以STM32F407VEXX 系列 100pin 芯片为例讲解: 1、新建好一个空元件 2、使用阵列,放置管脚 点击 “ ok ” 3、选中所有管脚 右键 “edit properites” 出现如下页面 4、点击 左上角&…...
项目配置文件选择(Json,xml,Yaml, INI)
选择使用哪种类型的配置文件(如 JSON、XML 或其他格式)取决于多个因素,包括项目的需求、团队的熟悉程度、数据结构的复杂性以及可读性和可维护性等。以下是对常见配置文件格式的比较,以及在不同情况下的推荐: 1. JSON&…...
Android 使用Retrofit 以纯二进制文件流上传文件
一、背景 一般上传文件都是以表单形式上传文件,最近项目中涉及到非表单形式上传文件流,分为单个文件流上传、大文件分段上传,此种情景资料较少,这里记录下。 二、方案介绍 2.1 需求协议 1. 上传文件 API 端点:/serv…...
Vue3踩坑记录
目录 一、定义常变量 1.1、ref和reactive到底用谁? 二、双向绑定 2.1、直接改变表格该行数据 2.1、在弹窗改变表格该行数据 一、定义常变量 1.1、ref和reactive到底用谁? 已知:使用ref定义基础类型数据;使用reactive定义复…...
大数据-227 离线数仓 - Flume 自定义拦截器(续接上节) 采集启动日志和事件日志
点一下关注吧!!!非常感谢!!持续更新!!! Java篇开始了! 目前开始更新 MyBatis,一起深入浅出! 目前已经更新到了: Hadoop࿰…...
【热门主题】000054 ECMAScript:现代 Web 开发的核心语言
前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 【热…...
【Pytorch】torch.nn.functional模块中的非线性激活函数
在使用torch.nn.functional模块时,需要导入包: from torch.nn import functional 以下是常见激活函数的介绍以及对应的代码示例: tanh (双曲正切) 输出范围:(-1, 1) 特点:中心对称,适合处理归一化后的数据…...
reactflow 中 useNodesState 模块作用
1. 节点状态管理核心功能 useNodesState是一个关键的钩子函数,用于专门管理节点(Nodes)的状态。节点是流程图的核心元素,它们可以代表各种实体,如流程中的任务、系统中的组件或者数据结构中的元素。 useNodesState提…...
Go语言内存分配源码分析学习笔记
大家好,我是V 哥。GO GO GO,今天来说一说Go语言内存分配问题,Go语言内存分配的源码主要集中在runtime包中,它实现了Go语言的内存管理,包括初始化、分配、回收和释放等。下面来对这些过程详细分析一下,先赞后…...
【jvm】方法区常用参数有哪些
目录 1. -XX:PermSize2. -XX:MaxPermSize3. -XX:MetaspaceSize(Java 8及以后)4. -XX:MaxMetaspaceSize(Java 8及以后)5. -Xnoclassgc6. -XX:TraceClassLoading7.-XX:TraceClassUnLoading 1. -XX:PermSize 1.设置JVM初始分配的永久…...
JAVA环境的配置
首先找到JDK环境的官网。 Java Archive Downloads - Java SE 8u211 and laterhttps://www.oracle.com/java/technologies/javase/javase8u211-later-archive-downloads.html 我下载的最后一个x64.exe,下载后,直接双击运行,我这里默认安装到…...
LLM文档对话 —— pdf解析关键问题
一、为什么需要进行pdf解析? 最近在探索ChatPDF和ChatDoc等方案的思路,也就是用LLM实现文档助手。在此记录一些难题和解决方案,首先讲解主要思想,其次以问题回答的形式展开。 二、为什么需要对pdf进行解析? 当利用L…...
MySQL单表查询时索引使用情况
本文针对 MySQL 单表查询时索引使用的几种场景情况进行分析。 假设有一个表如下: CREATE TABLE single_table (id INT NOT NULL AUTO_INCREMENT,key1 VARCHAR(100),key2 INT,key3 VARCHAR(100),key_part1 VARCHAR(100),key_part2 VARCHAR(100),key_part3 VARCHAR(1…...
Qt邮箱程序改良版(信号和槽)
上一版代码可以正常使用,但是会报错 上一篇文章 错误信息 "QSocketNotifier: Socket notifiers cannot be enabled or disabled from another thread" 指出了一个问题,即在非主线程中尝试启用或禁用套接字通知器(QSocketNotifier)…...
入门到精通mysql数据(四)
5、运维篇 5.1、日志 5.1.1、错误日志 错误日志是MySQL中最重要的日志之一,它记录了当mysqld启动和停止,以及服务器在运行过程中发生任何严重错误时的相关信息。当数据库出现任何故障导致无法正常使用时,建议首先查看此日志。 该日志是默认开启的,默认存放目录/var/log…...
做外贸网站买海外域名/他达拉非片正确服用方法
string strT"aaa";DataClass adatalist.Find(delegate(DataClass pF) { return pF.NamestrT; }); 注:本随笔为本人总结后发布,如果有雷同,纯属巧合本人邮箱:freedomjimgmail.com,如有疑问和交流欢迎发邮件过…...
中山网站外包/网站备案信息查询
这篇文章主要介绍了微信小程序通过api接口将json数据展现到小程序示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧实现知乎客户端的一个重要知识前提就是,要知道怎么通过知乎新闻的接口ÿ…...
wordpress 开发视频/湖南网站建设推广
logging 用法1. 初始化 logger logging.getLogger("endlesscode"),getLogger()方法后面最好加上所要日志记录的模块名字,后面的日志格式中的%(name)s 对应的是这里的模块名字2. 设置级别 logger.setLevel(logging.DEBUG),Logging中有NOTSET &…...
凡科做的网站行不行/seo管理
一.多层路由 如果django里的app数量越来越多,那项目里的urls文件配置起来将会很麻烦,而且也不利于后续项目的改动和整理 所以看了杨老师的视频https://www.bilibili.com/video/av17267741后,记录一下关于多层路由的配置 url文件分为两类&…...
两个wordpress数据同步/搜索引擎排名大全
关于异性朋友和恋人的分界线,你是否思考过「男女之间的友情是否成立」这一话题呢?是否也会在意作为恋爱对象的异性朋友,也会有想要从朋友发展成恋人,相反想要继续保持良好的朋友关系的情况。本文将把焦点放在「异性朋友和恋人的差…...
上海普陀区企业网站建设/网站设计
阿弥陀佛。好久没写文章,实在是受不了了。特来填坑,近期实习了(ting)解(shuo)到(le)非常多工业界经常使用的算法。诸如GBDT,CRF,topic model的一些算法等。也看了不少东西。有时间能够具体写一下,而至于实现那真的是没时间没心情再做了&#…...