C/C++语言基础--initializer_list表达式、tuple元组、pair对组简介
本专栏目的
- 更新C/C++的基础语法,包括C++的一些新特性
前言
- initializer_list表达式、tuple元组、pair对组再C++日常还是比较常用的,尤其是对组在刷算法还是挺好用的,这里做一个简介;
- 这三个语法结合C++17的结构化绑定会更好用,结构化绑定后面会更新;
- C语言后面也会继续更新知识点,如内联汇编;
- 欢迎收藏 + 关注,本人将会持续更新。
文章目录
- std::initializer_list
- 使用步骤
- std::tuple
- 创建
- 获取元素值
- 作为函数返回值
- std::pair
std::initializer_list
为了编写能够处理不同数量实参,但是类型相同,C++11新标准提供了std::initializer_list的方法,它提供了一种方便的方式来初始化容器或执行其他形式的初始化。std::initializer_list 主要用于构造函数和其他函数的参数列表中,允许使用大括号 {} 包围的初始化列表来传递多个元素。
- 普通函数使用
void showMsg(const std::initializer_list<std::string>& list)
{for (auto& n : list){cout << n << " ";}cout << endl;
}
showMsg({ "hello","world","嘿嘿"});
- 构造函数使用
template<typename T,size_t _size>
class Array
{
public:Array() {}Array(const std::initializer_list<T>& list) {size_t i = 0;for (auto& v : list) //必须使用这个{_arr[i++] = v;}}constexpr size_t size()const { return _size; }T& operator[](int index){return _arr[index];}T _arr[_size]{ T() };
};Array<int, 10> arr = { 1,2,3,4,5,6 };
for (int i = 0; i < arr.size(); i++)
{cout << arr[i] << " ";
}
注意: 这个表达式只允许读,不允许修改里面元素;
相对于数组:语法简单,可以支持{}初始化,也更安全了。
使用步骤
1、用花括号初始化器列表列表初始化一个对象,其中对应构造函数接受一个std::initializer_list 参数
2、以花括号初始化器列表为赋值的右运算数,或函数调用参数,而对应的赋值运算符/函数接受 std::initializer_list 参数
3、绑定花括号初始化器列表到 auto ,包括在范围 for 循环中
std::tuple
😋 简介:元组,可以存储多个元素,包括不同类型的元素;
创建
void create()
{//1.模板std::tuple<int, const char*, const char*> tup(18, "wy", "wqy");//2.构造函数(推荐)auto m_tup = std::make_tuple(18, "wy love", "wqy");//3.右值引用auto m_right = std::forward_as_tuple(18, "wy love", "wqy");
}
获取元素值
🔐 可以通过std::get来获取
void print()
{auto m_tup = std::make_tuple(18, "wy", "love", "wqy");//1.get 获取,可以改变值std::get<0>(m_tup) = 19;std::cout << std::get<0>(m_tup) << " " << std::get<1>(m_tup) << " " << std::get<2>(m_tup) << " " << std::get<3>(m_tup) << std::endl;//2.tie 获取int age;const char* name;const char* word;const char* she;std::tie(age, name, word, she) = m_tup;std::cout << age << " " << name << " " << word << " " << she << std::endl;std::string na;std::tie(std::ignore, std::ignore, na, std::ignore) = m_tup; //得需要完整的参数个数//3.tie 还可以创建一个tuple ,但是必须为左值auto m_tp = std::tie(word, she);//4. std::tie_cat 连接auto new_tup = std::tuple_cat(m_tup, m_tp);//输出 get / tiestd::cout << std::get<0>(new_tup) << " " << std::get<5>(new_tup) << std::endl;
}
作为函数返回值
#include<iostream>
#include<tuple>auto show()
{return std::make_tuple(1, 2, 3);
}int main()
{print();//作用:可以做函数多个参数返回值int x, y, z;auto m_tup = show();std::tie(x, y, z) = show();std::cout << x << " " << y << " " << z << std::endl;return 0;
}
std::pair
简介: 这个用处还是很大的,可以存储两个元素,类似于KV存储。
📖 常用操作
- 构建对组
- 访问对组元素,第一个
.first,第二个.second - 常用操作代码:
#include<iostream>void createText();//用处
auto _with()
{return std::make_pair(1, 2);
}int main()
{createText();auto text = _with();std::cout << text.first << " " << text.second << std::endl;return 0;
}void createText()
{//pair 对组 //first second//1. 模板构造std::pair<std::string, std::string> m_pair("wy", "wqy");//2. make_pairauto m_p = std::make_pair("wqy", "wy");输出std::cout << m_pair.first << " " << m_pair.second << std::endl; std::cout << m_p.first << " " << m_p.second << std::endl;
}
注意,对 对组 元素进行排序,则默认按照第一个元素进行排序,代码如下:
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;int main()
{std::vector<std::pair<int, std::string>> kv{ {10, "y"},{19, "x"},{18, "z"},{1, "b"},{22,"k"} };sort(kv.begin(), kv.end());for (auto& it : kv) {std::cout << it.first << " " << it.second << std::endl;}return 0;
}
⛑ 结果:

如果想要按照第二个排序,则需要需要用介词函数,什么是介词函数??这个等到STL的时候在讲解吧,代码如下:
#include <iostream>
#include <algorithm>
#include <vector>int main()
{std::vector<std::pair<int, std::string>> kv{ {10, "y"},{19, "x"},{18, "z"},{1, "b"},{22,"k"} };sort(kv.begin(), kv.end(), [=](const std::pair<int, std::string>& a, const std::pair<int, std::string>& b) {return a.second < b.second;});for (auto& it : kv) {std::cout << it.first << " " << it.second << std::endl;}return 0;
}
结果:

相关文章:
C/C++语言基础--initializer_list表达式、tuple元组、pair对组简介
本专栏目的 更新C/C的基础语法,包括C的一些新特性 前言 initializer_list表达式、tuple元组、pair对组再C日常还是比较常用的,尤其是对组在刷算法还是挺好用的,这里做一个简介;这三个语法结合C17的结构化绑定会更好用ÿ…...
paddle表格识别数据制作
数据格式 其中主要数据有两个一个表格结构的检测框,一个是tokens,注意的地方是 1、只能使用双引号,单引号不行 2、使用带引号的地方是tokens里面 "<tr>", "<td", " colspan2", ">",&quo…...
python selenium库的使用:通过兴趣点获取坐标
通过兴趣点获取坐标 from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.common.exceptions import TimeoutException# 保存Cookies到文件(可选) import pi…...
如何优化Kafka消费者的性能
要优化 Kafka 消费者性能,你可以考虑以下策略: 并行消费:通过增加消费者组中的消费者数量来并行处理更多的消息,从而提升消费速度。 批量消费:配置 fetch.min.bytes 和 fetch.max.wait.ms 参数来控制批量消费的大小和…...
机器学习 决策树
决策树-分类 1 概念 1、决策节点通过条件判断而进行分支选择的节点。如:将某个样本中的属性值(特征值)与决策节点上的值进行比较,从而判断它的流向。 2、叶子节点没有子节点的节点,表示最终的决策结果。 3、决策树的深度所有节点的最大层…...
效益登记册效益管理计划
效益登记册 benefit Register效益管理计划效益登记册汇集并列出项目集计划的效益,用于在项目集的整个持续时间内测量和沟通效益的交付。在效益识别阶段,效益登记册根据项目集商业论证、组织战略计划和其他相关项目集自标而编制。随后,登记册由…...
Go语言的零值可用性:优势与限制
Go语言以其简洁和高效的设计理念而著称,其中之一便是“零值可用”的特性。这一特性使得许多类型在未显式初始化时即可直接安全地使用,大大简化了代码的初始化过程。然而,并非所有类型都支持零值可用,且在使用时也存在一定的限制。…...
【自用】0-1背包问题与完全背包问题的Java实现
引言 背包问题是计算机科学领域的一个经典优化问题,分为多种类型,其中最常见的是0-1背包问题和完全背包问题。这两种问题的核心在于如何在有限的空间内最大化收益,但它们之间存在一些关键的区别:0-1背包问题允许每个物品只能选择…...
HTML5实现俄罗斯方块小游戏
文章目录 1.设计来源1.1 主界面1.2 皮肤风格1.2 游戏中界面1.3 游戏结束界面 2.效果和源码2.1 动态效果2.2 源代码 源码下载 作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/details/143788449 HTML5实现俄罗斯方块小游戏&#x…...
Mybatis官方生成器使用示例
在这篇文章中,我们将通过实际代码示例来说明如何使用 MyBatis Generator (MBG) 来自动化生成 MyBatis 项目所需的实体类、Mapper 接口和 Mapper XML 文件。我们将使用一个 Maven 插件来执行代码生成,并提供详细的配置和解释。 1. MyBatis Generator 简介…...
演员王子辰—专注革命题材 《前行者》后再出发
2021年10月22日在北京卫视播出的由张鲁一、聂远等人主演的电视剧《前行者》,讲述了在二十世纪三十年代初,因叛徒出卖,我上海地下党组织遭到严重破坏,革命事业陷入一片白色恐怖之中。我党情报员马天目刚从法国归来,临危…...
Spring Boot基础教学:创建第一个Spring Boot项目
使用Spring Initializr生成项目 Spring Initializr是一个在线工具,用于快速生成Spring Boot项目的基本结构。以下是使用Spring Initializr创建项目的步骤: 步骤1:访问Spring Initializr 打开网址 start.spring.io。 步骤2:选择…...
基于SpringBoot+Vue实现校园多媒体信息共享平台
作者简介:Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、多年校企合作经验,被多个学校常年聘为校外企业导师,指导学生毕业设计并参与学生毕业答辩指导,…...
WebRTC API分析
主题 本文详细描述常用的webrtc api 媒体协商类 myPeerConnection.createOffer([options]); var options { offerToReceiveAudio: true, // 告诉另一端,你是否想接收音频,默认true offerToReceiveVideo: true, // 告诉另一端&a…...
ArkTS学习笔记:ArkTS起步
ArkTS是HarmonyOS的主力应用开发语言,基于TypeScript扩展,强化了静态检查和分析,旨在提升程序稳定性和性能。它采用静态类型,禁止运行时改变对象布局,并对UI开发框架能力进行扩展,支持声明式UI描述和自定义…...
spring-gateway网关聚合swagger实现多个服务接口切换
前提条件 微服务已经集成了swagger,并且注册进了nacos。 gateway配置 package com.zmy.springcloud.config;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springfra…...
关于 Oracle Database Express Edition 的功能和安装
Oracle Database Express Edition,简称 Oracle Database XE。是一个免费的版本,主要用于培训和一些功能要求比较简单,又需要免费分发的场景。 看看官方的说明: Whether you are a developer, a DBA, a data scientist, an educat…...
领夹麦克风哪个品牌好,手机领夹麦克风哪个牌子好,选购推荐
无线麦克风凭借其无与伦比的便携性与灵活性,成为在演讲、表演以及会议等多种场合中不可或缺的有力帮手。它挣脱了线缆的束缚,使得声音的传播更加自由自在。其操作十分简便,只需简单配对就能投入使用,从而可以轻松地适应各类场景…...
什么是 Go 语言?
Go 语言(也称为 Golang)是由 Google 开发的一种开源编程语言。它最初由 Rob Pike、Ken Thompson 和 Robert Griesemer 等人于 2007 年设计,经过两年的研发,于 2009 年首次公开发布。Go 语言的设计目标是提高编程效率,特…...
AI 大模型重塑软件开发流程:定义、应用、优势与挑战
随着人工智能技术的飞速发展,AI 大模型正在深刻影响软件开发的各个环节。从代码自动生成到智能测试,AI 大模型不仅提高了开发效率,还带来了全新的开发模式和流程变化。本文将从 AI 大模型的定义、应用场景、优势以及挑战等方面,探…...
网络工程师的日常:一次搞定eNSP中MSTP+VRRP的‘坑’与优化技巧
eNSP实战:MSTPVRRP组网中的典型故障排查与性能调优 凌晨两点,当我在eNSP模拟器中第三次看到"VRRP state transition to Backup"的日志时,咖啡杯已经见底。这个典型的双核心企业网架构本该在半小时内完成配置,却因为MSTP…...
重构窗口管理逻辑的效率革命:Loop重新定义macOS多任务体验
重构窗口管理逻辑的效率革命:Loop重新定义macOS多任务体验 【免费下载链接】Loop MacOS窗口管理 项目地址: https://gitcode.com/GitHub_Trending/lo/Loop 当你在三个浏览器窗口、两个文档和一个设计工具间频繁切换时,当你花费十分钟拖拽调整窗口…...
计算机视觉:从基础到深度学习应用
计算机视觉:从基础到深度学习应用 1. 背景与意义 计算机视觉(Computer Vision,简称CV)是人工智能领域的重要分支,旨在使计算机能够理解和处理图像信息。随着深度学习的发展,计算机视觉取得了突破性进展&…...
MiroFish群体智能引擎部署与配置全指南
MiroFish群体智能引擎部署与配置全指南 【免费下载链接】MiroFish A Simple and Universal Swarm Intelligence Engine, Predicting Anything. 简洁通用的群体智能引擎,预测万物 项目地址: https://gitcode.com/GitHub_Trending/mi/MiroFish MiroFish作为简洁…...
如何在ComfyUI中玩转WanVideo:从零到一的视频生成魔法
如何在ComfyUI中玩转WanVideo:从零到一的视频生成魔法 【免费下载链接】ComfyUI-WanVideoWrapper 项目地址: https://gitcode.com/GitHub_Trending/co/ComfyUI-WanVideoWrapper 你是否曾经想过,如果能像搭积木一样轻松创作视频该有多好ÿ…...
共源级PMOS反向串联电路在电源管理中的双向导通机制解析
1. 共源级PMOS反向串联电路的基本结构 先来看一个生活中常见的场景:你家的防盗门通常需要两把钥匙才能打开,一把从外面开,一把从里面开。共源级PMOS反向串联电路的工作原理就有点像这个双钥匙系统——它通过两个背靠背连接的PMOS管࿰…...
书匠策AI:课程论文创作的“智能导航仪”,解锁学术新境界!
在学术的浩瀚海洋中,每一篇课程论文都是学子们扬帆起航、探索未知的航船。然而,面对茫茫的学术资料、错综复杂的逻辑结构,以及严格的格式要求,不少学子常常感到迷茫与无助。别怕,今天我要为你介绍一位论文写作的“智能…...
用Python实战N皇后:从回溯的O(n!)到启发式修补的秒解,附完整性能对比代码
用Python实战N皇后:从回溯的O(n!)到启发式修补的秒解,附完整性能对比代码 N皇后问题作为经典的算法挑战,一直是检验编程技巧和算法思维的试金石。当棋盘规模n增大时,不同算法的性能差异会呈现指数级分化——回溯法在n15时可能需要…...
CentOS7服务器流量飙升?别慌,用iftop+nload快速揪出‘吃流量’的进程
CentOS7服务器流量异常排查实战:iftop与nload组合拳 深夜的告警铃声突然响起,监控系统显示某台核心业务服务器的带宽使用率飙升至95%。作为运维人员,这种场景并不陌生——可能是业务量激增,也可能是恶意攻击,或是某个失…...
终极指南:如何用jQuery.Flipster打造惊艳的3D封面流效果
终极指南:如何用jQuery.Flipster打造惊艳的3D封面流效果 【免费下载链接】jquery-flipster Responsive, CSS3, touch-enabled jQuery Coverflow plugin. 项目地址: https://gitcode.com/gh_mirrors/jq/jquery-flipster 还在为网站轮播图太单调而烦恼吗&#…...
