【C++STL基础入门】排序和遍历容器

news2024/11/20 11:44:09

文章目录

  • 前言
  • 使用前须知
    • 头文件
  • 一、for_each算法
    • 1.1 for_each是什么
    • 1.2 函数原型
    • 1.3 示例代码1:将容器中的每个元素打印出来
    • 1.4 示例代码2:将容器中的每个字符串转换为大写形式
  • 二、sort算法
    • 2.1 sort算法是什么?
    • 2.2 函数原型
    • 2.3 示例代码1:按升序排序容器中的字符串
    • 2.4示例代码4:按降序排序容器中的字符串
  • 总结


前言

STL(Standard Template Library)是C++的标准库之一,提供了丰富的容器、迭代器和算法等组件,方便了C++开发者进行快速而高效的编程。其中,for_each和sort是STL中两个有用的小算法,用于对容器中的元素进行遍历和排序。本文将介绍这两个算法的概念、函数原型,并给出相应的示例代码,使用string类作为示例。


使用前须知

头文件

我们需要使用头文件#include <algorithm>

一、for_each算法

1.1 for_each是什么

for_each算法用于对容器中的元素逐个进行处理操作,它接受一个函数对象作为参数,并将容器中的每个元素传递给函数对象进行处理。

1.2 函数原型

template<class InputIt, class UnaryFunction>
UnaryFunction for_each(InputIt first, InputIt last, UnaryFunction f);

参数3的函数可以参数可以是容器的类型,也可以是容器
在这里插入图片描述

1.3 示例代码1:将容器中的每个元素打印出来

#include <iostream>
#include <string>
#include <algorithm>

void printElement(const std::string& elem) {
    std::cout << elem << " ";
}

int main() {
    std::vector<std::string> names = {"Alice", "Bob", "Charlie", "David"};

    std::for_each(names.begin(), names.end(), printElement);

    return 0;
}

在这里插入图片描述

示例代码1演示了如何使用for_each算法将容器names中的每个元素打印出来。首先定义了一个函数printElement,它将一个字符串作为参数并打印它。然后,在main函数中调用for_each算法,传入names.begin()和names.end()来指定元素范围,并将printElement作为函数对象进行处理。执行该代码,会输出:Alice Bob Charlie David,每个元素以空格分隔。

1.4 示例代码2:将容器中的每个字符串转换为大写形式

#include <iostream>
#include <string>
#include <algorithm>

void toUpper(std::string& elem) {
    std::transform(elem.begin(), elem.end(), elem.begin(), ::toupper);
}

int main() {
    std::vector<std::string> names = {"Alice", "Bob", "Charlie", "David"};

    std::for_each(names.begin(), names.end(), toUpper);

    for (const std::string& elem : names) {
        std::cout << elem << " ";
    }

    return 0;
}

在这里插入图片描述

示例代码2展示了如何使用for_each算法对容器names中的每个元素进行大写转换操作。我们定义了一个函数toUpper,它接受一个字符串的引用,并使用std::transform将字符串中的字符转换为大写形式。然后,在main函数中调用for_each算法,将names.begin()和names.end()指定的元素范围传递给算法,并将toUpper作为函数对象进行处理。最后,我们遍历names并打印结果:ALICE BOB CHARLIE DAVID。

二、sort算法

2.1 sort算法是什么?

sort算法用于对容器中的元素进行排序操作,可以按升序或降序排列。

2.2 函数原型

template<class RandomIt>
void sort(RandomIt first, RandomIt last);

template<class RandomIt, class Compare>
void sort(RandomIt first, RandomIt last, Compare comp);

在这里插入图片描述

2.3 示例代码1:按升序排序容器中的字符串

#include <iostream>
#include <string>
#include <algorithm>

int main() {
    std::vector<std::string> names = {"Alice", "Bob", "Charlie", "David"};

    std::sort(names.begin(), names.end());

    for (const std::string& elem : names) {
        std::cout << elem << " ";
    }

    return 0;
}

在这里插入图片描述

示例代码1展示了如何使用sort算法按升序对容器names中的字符串进行排序。调用sort算法,传入names.begin()和names.end()指定的元素范围。执行该代码,会输出:Alice Bob Charlie David,即按照字母顺序排序的结果。

2.4示例代码4:按降序排序容器中的字符串

#include <iostream>
#include <string>
#include <algorithm>

bool compare(const std::string& a, const std::string& b) {
    return a > b;
}

int main() {
    std::vector<std::string> names = {"Alice", "Bob", "Charlie", "David"};

    std::sort(names.begin(), names.end(), compare);

    for (const std::string& elem : names) {
        std::cout << elem << " ";
    }

    return 0;
}

在这里插入图片描述

示例代码2展示了如何使用sort算法按降序对容器names中的字符串进行排序。我们定义了一个自定义比较函数compare,它接受两个字符串参数并比较它们的字典顺序。在调用sort算法时,传递了compare作为比较函数,以便在排序时按照降序进行排序。执行该代码,会输出:David Charlie Bob Alice,即按照字母逆序排序的结果。


总结

本文介绍了STL中的两个小算法:for_each和sort。for_each算法用于对容器中的元素进行遍历和处理操作,sort算法用于对容器中的元素进行排序。通过示例代码的演示,我们了解了这两个算法的概念、函数原型以及用法,并使用string类作为示例进行说明。这些算法在实际开发中很常用,能够极大地简化对容器的操作和排序需求。希望本文对你理解和使用STL算法有所帮助!

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

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

相关文章

Win10找不到hosts文件的解决方案

正常情况下&#xff0c;Windows10系统的C:\Windows\System32\drivers\etc目录下应该有hosts文件&#xff0c;但偏偏有些电脑没有&#xff0c;哪怕你打开了查看“隐藏的项目”也没见到hosts文件&#xff0c;如下&#xff1a; 解决方案 1、先点击查看&#xff0c;再点击选项&…

红队专题-工具Fscan

红队专题 招募六边形战士队员简介主要功能 ubuntu 安装windows 安装常用命令&#xff1a;项目框架源文件common目录Plugins目录Webscan目录爆破插件Webtitle函数webpoc扫描类型common.Scantype 免杀源码特征 参考链接 招募六边形战士队员 一起学习 代码审计、安全开发、web攻防…

有哪些免费的PPT模板网站,推荐这6个PPT模板免费下载网站!

混迹职场的打工人&#xff0c;或是还在校园的学生党&#xff0c;在日常的工作汇报或课程作业中&#xff0c;必然少不了PPT的影子&#xff0c;而每当提到做PPT&#xff0c;许多人首先会想到&#xff1a;有哪些免费的PPT模板下载网站&#xff1f; 本着辛苦自己&#xff0c;造福所…

(vue)el-select根据下拉框显示隐藏的visible-change的事件使用

(vue)el-select根据下拉框显示隐藏的visible-change的事件使用 <el-select v-model"value1"multiple:multiple-limit"2"placeholder"请选择" visible-change"visibleChange" ><el-option...></el-option> </el-s…

【C++STL基础入门】list基本使用

文章目录 前言一、list简介1.1 list是什么1.2 list的头文件 二、list2.1 定义对象2.2 list构造函数2.3 list的属性函数 总结 前言 STL&#xff08;Standard Template Library&#xff09;是C标准库的一个重要组成部分&#xff0c;提供了一套丰富的数据结构和算法&#xff0c;可…

【算法练习Day19】二叉搜索树的最近公共祖先二叉搜索树中的插入操作删除二叉搜索树中的节点

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

MS5611的ZYNQ驱动试验之一 分析

0&#xff0c;MS5611框图 1&#xff0c;原理图 项目需要用到MS5611气压计模块&#xff0c;原理图很简单明了&#xff0c;如下&#xff1a; 这里PS接GND是SPI接口模式&#xff0c;PS接VDD是I2C接口模式。我在设计原理图时候直接设置成了SPI模式&#xff0c;当然这个SPI不是纯粹意…

ubuntu 22.04.3 live server图文安装流程

备注&#xff1a;以下操作全用键盘&#xff0c;tab切换&#xff0c;enter确认&#xff0c;方向键移动&#xff1b; 一、安装操作系统 1、 选择安装&#xff0c;第一个&#xff1b; 2、选择语言&#xff0c;这里只能选择英语&#xff0c;无中文&#xff1b; 3、继续而不更新 4、…

springcloud笔记(7)-限流降级Sentinel

官方文档&#xff1a;概述 | Spring Cloud Alibaba basic-api-resource-rule | Sentinel (sentinelguard.io) Sentinel是SpringCloudAlibaba的组件。 sentinel的功能 introduction | Sentinel 流量控制 熔断降级&#xff1a;降低调用链路中的不稳定资源 系统负载保护&am…

什么是接口自动化?为什么要做?和怎么做接口自动化?

服务端接口测试介绍 什么是服务端&#xff1f; 一般所说的服务端是指为用户在 APP 或 PC 使用的互联网功能提供数据服务的背后的一切。以天猫精灵智能音箱系列的产品链路为例&#xff0c;服务端便是网关&#xff08;包括网关在内&#xff09;之后的链路。 什么是接口&#xf…

数据结构—— AVL树

&#xff08;一&#xff09; 基础补充 二叉搜索树(BST) 定义&#xff1a; 二叉搜索树&#xff08;Binary Search Tree&#xff09;&#xff0c;简写BST&#xff0c;是满足某些条件的特殊二叉树。任何一个节点的左子树上的点&#xff0c;都必须小于当前节点。任何一个…

java split分割去掉空值

代码如下&#xff1a; public static void main(String[] args) {String dataString "#01#02#03#00#05#434";String[] infos Arrays.stream(dataString.split("#")).filter(s -> !s.isEmpty()).toArray(String[]::new);//投向领域IDString[] infos2 d…

深度学习-房价预测案例

1. 实现几个函数方便下载数据 import hashlib import os import tarfile import zipfile import requests#save DATA_HUB dict() DATA_URL http://d2l-data.s3-accelerate.amazonaws.com/def download(name, cache_diros.path.join(.., data)): #save"""下载…

独立站活动怎么复盘,做独立站需要掌握哪些?-站斧浏览器

独立站的活动形式多种多样&#xff0c;可以通过推出抽奖活动、举办线下活动或者利用社交媒体平台来增加用户互动和参与度。但是要做好一个独立站&#xff0c;除了活动形式&#xff0c;还需要掌握设计能力、编程技术、SEO知识和内容创作能力。 独立站活动怎么复盘&#xff1f; …

学习编程-先改变心态

编程失败的天才 林一和我很久以前就认识了——我从五年级就认识他了。他是班上最聪明的孩子。如果每个人在家庭作业或考试准备方面需要帮助&#xff0c;他们都会去那里。 有趣的是&#xff0c;林一不是那种连续学习几个小时的孩子。 他的聪明才智似乎与生俱来&#xff0c;几乎毫…

Selenium八大定位策略实战,你会了么?

Selenium是一款非常强大的自动化测试工具&#xff0c;支持多种编程语言&#xff0c;如Java、Python等。在使用Selenium进行自动化测试时&#xff0c;定位元素是非常重要的一步&#xff0c;只有正确定位到元素才能进行后续的操作&#xff0c;如输入数据、点击按钮等。在Selenium…

HarmonyOS/OpenHarmony原生应用-ArkTS万能卡片组件Radio

单选框&#xff0c;提供相应的用户交互选择项。该组件从API Version 8开始支持。无子组件。 一、接口 Radio(options: {value: string, group: string}) 从API version 9开始&#xff0c;该接口支持在ArkTS卡片中使用。 参数: 二、属性 除支持通用属性外&#xff0c;还支持以…

springBoot组件注册

springBoot组件注册 前言1、创建组件文件2、写属性3、生成get和set方法4、以前注册的方法5、现在注册的方法6、在启动文件查看7、多实例Scope("prototype")8、注册第三方包导入对应的场景启动器注册组件查看是否存在也可以通过Import(FastsqlException.class)导入但是…

文字雨特效

效果展示 CSS 知识点 简易实现云朵技巧text-shadow 属性的灵活运用filter 属性实现元素自动变色 实现页面布局 <div class"container"><div class"cloud"><h2>Data Clouds Rain</h2></div> </div>实现云朵 实现云…

什么是API网关?——驱动数字化转型的“隐形冠军”

什么是API网关 API网关&#xff08;API Gateway&#xff09;是一个服务器&#xff0c;位于应用程序和后端服务之间&#xff0c;提供了一种集中式的方式来管理API的访问。它是系统的入口点&#xff0c;负责接收并处理来自客户端的请求&#xff0c;然后将请求路由到相应的后端服…