17.标准库特殊设施

news2024/11/18 9:30:37

文章目录

  • 标准库特殊设施
    • 17.1tuple类型
      • 17.1.1定义和初始化tuple
        • 访问tuple的成员
        • 关系和相等运算符
      • 17.1.2使用tuple返回多个值
    • 17.2bitset类型(后续需要时再详细了解)
    • 17.3正则表达式
    • 17.4随机数
    • bernoulli_distribution类
    • 17.5IO库再探

标准库特殊设施

17.1tuple类型

tuple(定义在tuple头文件中)是类似pair的模板。不同tuple类型的成员类型也不相同,但一个tuple可以有任意数量的成员。每个确定的tuple类型的成员数目是固定的,但一个tuple类型的成员数目可以与另一个tuple类型不同。
当希望将一些数据组合成单一对象,但又不想麻烦地定义一个新数据结构来表示这些数据时,tuple是非常有用的。

在这里插入图片描述

17.1.1定义和初始化tuple

当定义一个tuple时,需要指出每个成员的类型:

tuple<size_t, size_t, size_t> threeD;	// 三个成员都设置为0,值初始化。
tuple<string, vector<double>, int, list<int>> someVal("constants", {3.14, 2.718}, 42, {0, 1, 2, 3, 4, 5});
// 使用初始化来推断tuple的类型:tuple<const char*, int, double>
auto item = make_tuple("0-999-78345-X", 3, 20.00);

访问tuple的成员

// 尖括号中的值必须是一个整型常量表达式
auto book = get<0>(item);	// 返回item的第一个成员
auto cnt = get<1>(item);	// 返回item的第二个成员
auto price = get<2>(item) / cnt;	// 返回item的最后一个成员
get<2>(item) *= 0.8;	// 打折20%

如果不知道一个tuple准确的类型细节信息,可以用两个辅助类模板来查询tuple成员的数量和类型:

typedef decltype(item) trans;	// trans是item的类型
// 返回trans类型对象中成员的数量
size_t sz = tuple_size<trans>::value;	// 返回3
// cnt的类型与item中第二个成员相同
tuple_element<1, trans>::type cnt = get<1>(item);	// cnt是一个int

关系和相等运算符

只有两个tuple具有相同数量的成员时,才可以比较它们。而且,为了使用tuple的相等或不等运算符,对每对成员使用==运算符必须都是合法的;为了使用关系运算符,对每对成员使用<必须都是合法的:

tuple<string, string> duo("1", "2");
tuple<size_t, size_t> twoD(1, 2);
bool b = (duo == twoD);	// 错误:不能比较size_t和string。
tuple<size_t, size_t, size_t> threeD(1, 2, 3);
b = (twoD < threeD);	// 错误:成员数量不同。
tuple<size_t, size_t> origin(0, 0);
b = (origin < twoD);	// 正确:b为true。

17.1.2使用tuple返回多个值

tuple的一个常见用途是从一个函数返回多个值。

// 书店可能是多家连锁书店中的一家。每家书店都有一个销售记录文件,保存每本书近期的销售数据。
// 可能希望在所有书店中查询某本书的销售情况。
// 假定每家书店都有一个销售记录文件。每个文件都将每本书的所有销售记录存放在一起。进一步假设
// 已有一个函数可以读取这些销售记录文件,为每个书店创建一个vector<Sales_data>,并将这些vector
// 保存在vector的vector中:vector<vector<Sales_data>> files。

// matches有三个成员:一家书店的索引和两个指向书店vector中元素的迭代器。
typedef tuple<vector<Sales_data>::size_type, 
			  vector<Sales_data>::const_iterator, 
			  vector<Sales_data>::const_iterator> matches;
// files保存每家书店的销售记录。
// findBook返回一个vector,每家销售了给定书籍的书店在其中都有一项。
vector<matches> findBook(const vector<vector<Sales_data>> &files, const string &book) {
	vector<matches> ret;	// 初始化为空vector
	// 对每家书店,查找与给定书籍匹配的记录范围(如果存在的话)。
	for (auto it = files.cbegin(); it != files.cend(); ++it) {
		// 查找具有相同ISBN的Sales_data范围
		auto found = equal_range(it->cbegin(), it->cend(), book, compareIsbn);
		if (found.first != found.second) {	// 此书店销售了给定书籍
			// 记住此书店的索引及匹配的范围
			ret.push_back(make_tuple(it - files.cbegin(), found.first, found.second));
		}
	}

	return ret;	// 如果未找到匹配记录的话,ret为空。
}

void reportResults(istream &in, ostream &os, const vector<vector<Sales_data>> &files) {
	string s;	// 要查找的书
	while (in >> s) {
		auto trans = findBook(files, s);	// 销售了这本书的书店
		if (trans.empty()) {
			cout << s << " not found in any stores" << endl;
			continue;	// 获得下一本要查找的书
		}
		for (const auto &store : trans) {	// 对每家销售了给定书籍的书店
			// get<n>返回store中tuple的指定的成员
			os << "store " << get<0>(store) << " sales: "
			   << accumulate(get<1>(store), get<2>(store), Sales_data(s))
			   << endl;
		}
	}
}

17.2bitset类型(后续需要时再详细了解)

17.3正则表达式

17.4随机数

bernoulli_distribution类

17.5IO库再探

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

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

相关文章

Spark工作原理

1&#xff09;Spark工作原理&#xff1a; 首先看中间是一个Spark集群&#xff0c;可以理解为是Spark的 standalone集群&#xff0c;集群中有6个节点 左边是Spark的客户端节点&#xff0c;这个节点主要负责向Spark集群提交任务&#xff0c;假设在这里我们向Spark集群提交了一个任…

周赛334(前缀和、贪心+双指针、Dijkstra求最短路径、二分答案)

文章目录[6369. 左右元素和的差值](https://leetcode.cn/problems/left-and-right-sum-differences/)前缀和[6368. 找出字符串的可整除数组](https://leetcode.cn/problems/find-the-divisibility-array-of-a-string/)超长整数如何取余&#xff1f;[6367. 求出最多标记下标](ht…

9.3 IGMPv3

实验目的 熟悉IGMPv3的应用场景掌握IGMPv3的配置方法实验拓扑 实验拓扑如图9-22所示&#xff1a; 图9-22&#xff1a;IGMPv3 实验步骤 &#xff08;1&#xff09;配置IP地址 MCS1的配置 MCS1的IP地址配置如图9-23所示&#xff1a; 图9-23&#xff1a;配置MCS1的IP地址 MCS2…

结构体字节对齐、偏移量

复习下struct的大小、成员偏移量offsetof&#xff0c;说下我的理解&#xff1a; 64位下默认对齐数default8原则1&#xff1a;struct中每一个成员变量tmp的对齐数realmin{default,tmp} struct Student {int num;//0char name[8];double score; } stu; 这个结构体stu中&#x…

阿里前端二面经典手写面试题汇总

实现类的继承 实现类的继承-简版 类的继承在几年前是重点内容&#xff0c;有n种继承方式各有优劣&#xff0c;es6普及后越来越不重要&#xff0c;那么多种写法有点『回字有四样写法』的意思&#xff0c;如果还想深入理解的去看红宝书即可&#xff0c;我们目前只实现一种最理想…

rollup环境配置

VUE2.x源码学习笔记 1. rollup环境配置 首先在VScode中新建文件夹vue_sc&#xff0c;然后终端打开定位到打开的文件夹&#xff0c;输入“npm init -y”初始化配置项&#xff0c;运行成功之后文件夹新增package.json文件 继续在终端运行"npm install babel/preset-env ba…

浅析Tomcat架构上的Valve内存马(内存马系列篇十一)

写在前面 这篇也是在Tomcat容器上面构造的内存马(收回之前说的不搞Tomcat了)&#xff0c;这是建立在Tomcat的管道上面做文章的一个内存马的实现方式。这是内存马系列的第十一篇文章了。 前置 什么是Pipeline-Valve管道&#xff1f; 根据前面Tomcat架构的相关知识&#xff0…

腾讯云卖向“有币”区块链

曾经坚决“不涉币”的腾讯云将业务延伸向“有币区块链”。 在首届 Web3 全球峰会“腾讯云Web3构建日”上&#xff0c;腾讯云宣布进军Web3&#xff0c;并公开了与Ankr、Avalanche、Scroll和Sui 四个原生区块链项目的合作&#xff0c;其中前两个项目都发行了加密货币&#xff0c…

关于Java中的静态块讲解

文章目录类的加载特性与时机类加载的特性类加载的时机static的三个常用地方什么是静态块?特点写法静态块 static怎么用?类的加载特性与时机 在介绍static之前可以先看看类的相关 类加载的特性 在JVM的生命周期里&#xff0c;每个类只会被加载一次。 类加载的原则&#xf…

老板让我在Linux中使用traceroute排查服务器网络问题,幸好我收藏了这篇文章!

一、前言 作为网络工程师或者运维工程师&#xff0c;traceroute命令不会陌生&#xff0c;它的作用类似于ping命令&#xff0c;用于诊断网络的连通性&#xff0c;不过traceroute命令输出的命令会比ping命令丰富的多&#xff0c;可以跟踪从源系统到目标系统的路径。 很多工程师…

jsp城乡信息管理系统

技术&#xff1a;Java、JSP等摘要&#xff1a;管理信息系统&#xff08;Management System&#xff0c;简称MS&#xff09;是一个由管理人员和计算机组成的用以进行信息的收集、传输、加工、存储、维护和使用的系统。它是一门综合了管理科学&#xff0c;系统理论&#xff0c;计…

WSL2:开发环境安装

写在前面 主要是记录一下如何安装和搭建基于WSL2的开发环境&#xff1b;参考博文&#xff1a;搭建优雅的Windows终端 Windows terminalscoopstarship&#xff1b; 一、安装WSL2 以管理员身份运行CMD&#xff0c;执行以下命令即可WSL和Linux的默认Ubuntu发行版&#xff1a; …

【聚类】谱聚类解读、代码示例

【聚类】谱聚类详解、代码示例 文章目录【聚类】谱聚类详解、代码示例1. 介绍2. 方法解读2.1 先验知识2.1.1 无向权重图2.1.2 拉普拉斯矩阵2.2 构建图&#xff08;第一步&#xff09;2.2.1 ϵ\epsilonϵ 邻近法2.2.2 k 近邻法2.2.3 全连接法2.3 切图&#xff08;第二步&#xf…

基于jeecgboot的flowable的H5版本在演示系统发布

目前在NBCIO 亿事达企业管理平台上发布了H5的在线演示系统&#xff0c;欢迎大家批评指正。 在nbcio-vue nbcio-vue: NBCIO 亿事达企业管理平台前端代码&#xff0c;基于ant-design-vue-jeecg的前端版本&#xff1a; 3.0.0代码和和flowable6.7.2&#xff0c;初步完成了集流程设…

【Linux】安装MySQL

目录 1.检测当前系统是否安装过MySQL相关数据库 2. 卸载现有的MySQL数据库 3.上传解压 4.顺序安装rpm包 5.启动MySQL 6.查看临时密码 7.登录MySQL 8.开放端口 1.检测当前系统是否安装过MySQL相关数据库 需要通过rpm相关指令&#xff0c;来查询当前系统中是否存在已安…

无法将“django-admin”项识别为cmdlet,函数,脚本文件或可运行程序的名称问题

无法将“django admin”项识别为cmdlet&#xff0c;函数&#xff0c;脚本文件或可运行程序的名称问题 小提示&#xff1a;首先检查一下有没有拼写错误&#xff01;&#xff01;&#xff01;没有的话请继续 我们要知道django装到哪里去了 pip show django 注意&#xff1a;3.0…

Flutter(二)第一个Flutter应用

1.默认应用 在Android Studio中创建好项目以后&#xff0c;项目的入口即是lib下的main.dart import package:flutter/material.dart;void main() {runApp(const MyApp()); } //无状态的组件&#xff08;Stateless widget&#xff09; class MyApp extends StatelessWidget {}…

基于paddlex的C#环境配置及其部署【附带安装包】

前言 最近应老师要求部署一个基于paddlex的C#环境&#xff0c;踩了一些坑&#xff0c;经过几个版本的安装测试&#xff0c;最终成功&#xff0c;这里记录一下。此次用到的所有软件的安装包如下&#xff1a; 补充的vs 2019安装包&#xff1a; 官方参考链接&#xff08;没有环…

Meta利用视觉信息来优化3D音频模型,未来将用于AR/VR

我们知道&#xff0c;Meta为了给AR眼镜打造智能助手&#xff0c;专门开发了第一人称视觉模型和数据集。与此同时&#xff0c;该公司也在探索一种将视觉和语音融合的AI感知方案。相比于单纯的语音助手&#xff0c;同时结合视觉和声音数据来感知环境&#xff0c;可进一步增强智能…

ERD Online 4.0.9 在线数据库建模、元数据管理平台(免费、私有部署)

ERD Online 是全球第一个开源、免费在线数据建模、元数据管理平台。提供简单易用的元数据设计、关系图设计、SQL查询等功能&#xff0c;辅以版本、导入、导出、数据源、SQL解析、审计、团队协作等功能、方便我们快速、安全的管理数据库中的元数据。 4.0.9 ❝ feat(erd): 主键生…