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 大模型的定义、应用场景、优势以及挑战等方面,探…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...

基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...

Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...

LeetCode - 394. 字符串解码
题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...