C++那些让我们偷懒的函数

news2024/11/17 9:41:58

在这里插入图片描述

欢迎来到Cefler的博客😁
🕌博客主页:那个传说中的man的主页
🏠个人专栏:题目解析
🌎推荐文章:题目大解析(3)

在这里插入图片描述


前言
让我们康康c++为我们提供的懒人函数吧,后续会不间断补充。


目录

  • 👉🏻max_element
  • 👉🏻min_element
  • 👉🏻std::stoi
  • 👉🏻std::set_intersection

👉🏻max_element

使用std::max_element函数找到容器中的最大元素:

#include <iostream>
#include <algorithm>
#include <vector>

int main() {
    std::vector<int> numbers = {5, 3, 8, 2, 9, 1};
    
    auto maxElement = std::max_element(numbers.begin(), numbers.end());
    
    std::cout << "最大值是:" << *maxElement << std::endl;
    
    return 0;
}

👉🏻min_element

std::min函数是C++标准库中用于比较两个值并返回较小值的函数。这个函数有两个版本,一个接受两个参数,另一个接受一个序列(容器)作为参数。

  1. std::min函数接受两个参数,用于比较两个值的大小,并返回较小的那个值。它可以用于大多数内置类型和用户定义的类型,只要该类型支持小于运算符(<)。
#include <iostream>
#include <algorithm>

int main() {
    int a = 10;
    int b = 20;
    
    int minValue = std::min(a, b); // 返回10
    
    double x = 3.14;
    double y = 2.71;
    
    double minDoubleValue = std::min(x, y); // 返回2.71
    
    return 0;
}
  1. std::min函数还可以接受一个序列(容器),用于查找序列中的最小值,并返回该值。它需要两个迭代器作为参数,分别表示序列的起始位置和结束位置。
#include <iostream>
#include <algorithm>
#include <vector>

int main() {
    std::vector<int> numbers = {5, 3, 8, 2, 9, 1};
    
    auto minValue = std::min_element(numbers.begin(), numbers.end()); // 返回1
    
    return 0;
}

上述代码中,std::min_element函数查找numbers容器中的最小值,并返回一个迭代器,该迭代器指向最小值所在的位置。

需要注意的是

std::min_element函数返回的是一个迭代器,用于指向容器中的最小元素。因为容器中的元素类型可能各不相同,所以无法事先确定返回值的具体类型。为了方便,我们可以使用auto关键字将返回值的类型推断出来。

auto是C++11引入的关键字,用于自动推断变量的类型。通过使用auto关键字,编译器会根据初始化表达式的类型来推断变量的类型,省去了显式指定变量类型的麻烦。

在上述代码中,std::min_element返回的迭代器可以指向任何类型的元素,因此我们不确定具体的类型是什么。为了方便编写代码并保持代码的通用性,我们可以使用auto关键字来让编译器自动推断返回值的类型。

#include <iostream>
#include <algorithm>
#include <vector>

int main() {
    std::vector<int> numbers = {5, 3, 8, 2, 9, 1};
    
    auto minValue = std::min_element(numbers.begin(), numbers.end()); // 返回1
    
    return 0;
}

在上述代码中,minValue的类型会被自动推断为std::vector<int>::iterator,这是由于numbers容器是std::vector<int>类型,并且std::min_element返回的是该容器的迭代器。

使用auto关键字可以简化代码,并且使代码更加通用和易读。当我们不确定变量的具体类型时,使用auto是一个很好的选择。

👉🏻std::stoi

在C++中,可以使用std::stoi()函数将std::string类型的对象转换为整数。

#include <iostream>
#include <string>

int main() {
    std::string str = "12345";
    
    int num = std::stoi(str);
    
    std::cout << "Converted number: " << num << std::endl;
    
    return 0;
}

在上述代码中,我们将字符串"12345"赋值给std::string对象str,然后使用std::stoi()将其转换为整数,并将结果赋值给num变量。最后,通过输出流std::cout打印出转换后的整数结果。

需要注意的是,std::stoi()函数在转换过程中会忽略字符串前导的空格,并且如果字符串中有非数字字符,则转换会停止并返回有效数字部分。如果无法转换为整数,则会抛出std::invalid_argumentstd::out_of_range异常。

另外,还有其他类似的函数可以将std::string转换为其他类型,比如std::stol()用于长整型、std::stof()用于单精度浮点型、std::stod()用于双精度浮点型等。这些函数都属于C++标准库的一部分,可以在头文件<string>中找到它们的声明。


std::stoi()函数会忽略整数字符串前方的空格并将其作为有效数字部分进行解析。因此,如果传入的字符串是"00123",它会被解析成整数123,转换成功。

下面是一个例子:

#include <iostream>
#include <string>

int main() {
    std::string str = "00123";
    
    int num = std::stoi(str);
    
    std::cout << "Converted number: " << num << std::endl;
    
    return 0;
}

输出:

Converted number: 123

需要注意的是,如果字符串前方有非零数字的前导零,则会被忽略。比如字符串"0123"会被解析成整数123,而不是123

👉🏻std::set_intersection

C++标准库提供了多种从两个容器中找交集的函数,其中一个常用的函数是std::set_intersection。这个函数可用于查找两个有序容器(如std::vectorstd::setstd::map)中的交集,并将结果放入一个输出迭代器所指定的位置。下面是一段使用std::set_intersection函数的示例代码:

#include <iostream>
#include <vector>
#include <algorithm>

int main() {
    std::vector<int> vec1 = {1, 2, 3, 4, 5};
    std::vector<int> vec2 = {3, 4, 5, 6, 7};
    std::vector<int> intersection;

    std::set_intersection(vec1.begin(), vec1.end(), vec2.begin(), vec2.end(), std::back_inserter(intersection));

    std::cout << "Intersection: ";
    for (const auto& num : intersection) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    return 0;
}

上述代码首先创建了两个向量vec1vec2,并初始化它们为{1, 2, 3, 4, 5}{3, 4, 5, 6, 7}

然后,我们创建了一个名为intersection的向量来存储两个向量之间的交集。接着,我们使用std::set_intersection函数将两个向量的交集放入intersection向量中。

最后,我们输出交集的值。

输出:

Intersection: 3 4 5 

需要注意的是,为了使用std::set_intersection函数,两个容器必须是有序的,也就是说,它们内部的元素已经排好序了。如果容器中的元素没有排序,则必须首先对它们进行排序操作。

另外,需要指定一个输出迭代器来存储交集元素。在上述代码中,我们使用std::back_inserter函数和intersection向量的begin函数来创建一个输出迭代器,它会将数据插入intersection向量的尾部。你也可以使用其他类型的输出迭代器来保存结果。

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

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

相关文章

tcpdump(一)基础理论知识

一 抓包分析技术初探 说明&#xff1a; 本篇章跟tcp/ip的知识没有关系,只是讲解tcpdump工具背景补充&#xff1a; 抓包是做报文分析的第一步敬畏心&#xff1a; 隔行如隔山,不要想当然 ① 背景 ② 抓包技术名词 1、捋顺这些技术的来龙去脉甚至八卦;2、这样我们在后续课程…

Stable Signature - 为开源生成式AI 创建的图像 添加水印的新方法

文章目录 关于 Stable Signature 关于 Stable Signature 一种为开源生成式AI创建的图像添加水印的新方法 Stable Signature: A new method for watermarking images created by open source generative AI https://ai.meta.com/blog/stable-signature-watermarking-generativ…

Redis三种模式(主从复制,哨兵,集群)

Redis三种模式&#xff08;主从复制&#xff0c;哨兵&#xff0c;集群&#xff09; 一、主从复制1.1、主从复制概述1.2、 Redis主从复制流程1.3、 Redis主从复制作用1.4 、部署Redis 主从复制 二、Redis 哨兵模式2.1、哨兵模式的原理2.2、哨兵模式的作用2.3、哨兵的结构组成2.4…

【Spring知识点介绍 | 第二篇】什么是AOP

前言&#xff1a; 在本文中&#xff0c;我们将介绍AOP的基本概念、原理和核心组件。我们将探讨AOP的作用、优势以及如何在实际应用中使用AOP来提升软件开发的效率和质量。无论是新手还是资深开发人员&#xff0c;都将受益于对AOP的理解和应用。 希望本文能够帮助读者对AOP有一…

MineDojo - “我的世界” 基础上构建的 具身智能体仿真组件

关于 MineDojo Building Open-Ended Embodied Agents with Internet-Scale Knowledge github : https://github.com/MineDojo/MineDojo论文&#xff1a;MineDojo: Building Open-Ended Embodied Agents with Internet-Scale Knowledge https://arxiv.org/abs/2206.08853 Min…

Linux安装 spark 教程详解

目录 一 准备安装包 二 安装 scala 三 修改配置文件 1&#xff09;修改 workers 文件 2&#xff09;修改 spark-env.sh文件 四 进入 spark 交互式平台 一 准备安装包 可以自行去 spark 官网下载想要的版本 这里准备了 spark3.1.2的网盘资源 链接: https://pan.baidu.com…

stl 输入输出流

标准输入输出流 头文件 iostream 从标准输入读取流 cin >> 从标准输出写入流 cout << get 系列函数 get 无参数&#xff1a;cin.get() 从指定的输入流中提取一个字符&#xff08;包括空白字符&#xff09;&#xff0c;若读取成功&#xff0c;返回该字符的 ASC…

css--踩坑

1. 子元素的宽高不生效问题 设置flex布局后&#xff0c;子元素的宽高不生效问题。 如果希望子元素的宽高生效&#xff0c;解决方法&#xff0c;给子元素添加如下属性&#xff1a; flex-shrink: 0; flex-shrink: 0;2. 横向滚动&#xff08;子元素宽度不固定&#xff09; /* tab…

K8s学习笔记5

安装Kubernetes&#xff1a; 主机名IP地址角色master192.168.17.131master结点node1192.168.17.132nodenode2192.168.17.133node 设置主机名&#xff1a; [rootlocalhost ~]# hostnamectl set-hostname master[rootlocalhost ~]# hostnamectl set-hostname node1[rootlocalho…

尤雨溪:Vite的现状与未来展望

10 月 5 日 - 6 日&#xff0c;ViteConf 2023 在线举行&#xff0c;Vue 和 Vite 的创建者尤雨溪发表了题为《The State of Vite》 的演讲&#xff0c;他分享了 Vite 的现状与未来展望&#xff0c;本文就来看一看 Vite 现在怎么样了&#xff0c;以及未来的路将怎么走&#xff01…

港联证券:a股b股区别?

A股和B股是指中国大陆股市中的两类股票&#xff0c;两者在法律规定、税收、流转规划和出资者身份等多个方面都有较大不同。下面从多个视点分析A股B股的差异。 一、法律规定 在中国大陆股市中&#xff0c;A股是指在上海证券生意所和深圳证券生意所上市流转的股票&#xff0c;只…

IDEA对比两个文件的内容

提前说明&#xff1a;IDEA可以用对比功能对比两个文件的内容&#xff0c;适合对比大部分内容重复&#xff0c;少部分内容有变化的两个文件。 第一步&#xff1a;鼠标点击选中一个文件 第二步&#xff1a;按照Ctrl的同时&#xff0c;鼠标左键再点击选择另一个文件 第三步&#…

零基础如何自学网络安全,基于就业前景全方位讲解,包教包会

你是否对网络空间安全充满好奇&#xff1f;想要解开网络世界神秘的面纱&#xff1f;你是否对黑客技术着迷&#xff1f;而找不到合适的学习途径&#xff1f;你是否遭到过各种各样的网络攻击&#xff0c;却因知识的匮乏束手无策&#xff1f; 那么接下来将为你全面介绍&#xff0c…

【算法练习Day14】二叉树的最大深度二叉树的最小深度完全二叉树的节点个数

​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;练题 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 文章目录 二叉树的最大深度二叉树的最…

插入排序/折半插入排序

插入排序/折半插入排序 插入排序 插入排序(英语&#xff1a;Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列&#xff0c;对于未排序数据&#xff0c;在已排序序列中从后向前扫描&#xff0c;找到相应位置并插入。插入排序在实现上&#xff0c;通常…

IDEA中字符串怎么自动转义,双引号自动转义的小技巧

1.选中要填写的字符串 &#xff0c;按altenter 2.点击 Inject language or reference&#xff0c;选择JSON组件 3.再次按altenter&#xff0c;点击Edit JSON Fragment 4.在弹出的窗口编辑源字符串&#xff0c;代码中字符串就能自动转义了

ThreeJS-3D教学五-材质

我们在ThreeJS-3D教学二&#xff1a;基础形状展示中有简单介绍过一些常用的材质&#xff0c;这次我们举例来具体看下效果&#xff1a; 代码是这样的&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8">&…

4.绘制颜色点(点击)

愿你出走半生,归来仍是少年&#xff01; 在点击绘制点的基础上&#xff0c;通过片源着色器给每个点设置颜色。以原点为中心&#xff0c;在一象限的点为红色&#xff0c;三象限为绿色&#xff0c;其他象限为白色。 1.知识点 1.1.Uniform变量 向片源着色器传入的数据变量。 1.…

1700*D. Flowers(DP前缀和预处理打表)

Problem - 474D - Codeforces 题意&#xff1a; 有白花和红花两种&#xff0c;把 x 朵花排成一排&#xff0c;要求白花必须连续 k 个一块放置&#xff0c;则有 cnt 种情况。给出 a 和 b&#xff0c;计算a到b之间的 x 对应的 cnt 总和&#xff0c;并且对1e97取模。 解析&#x…

第二证券:A股反弹已至?9月最牛金股涨超41%

进入10月&#xff0c;作为券商月度战略精华的新一期金股也连续宣布。 从各券商关于十月份的大势研判来看&#xff0c;一些券商达观地认为反弹行情正在打开&#xff0c;也有一些券商认为仍是轰动市。具体配备上&#xff0c;AI、科创相关的标的仍然遭到喜欢&#xff0c;一起不少…