当前位置: 首页 > news >正文

C++ 的标准模板库(STL)常用算法介绍

C++ 的标准模板库(STL)提供了丰富的算法,用于对容器中的元素进行各种操作和处理。下面我将介绍几个常用的 STL 算法,并为每个算法提供一个简单的示例来说明其基本用法。

1. std::for_each(遍历)

#include <iostream>
#include <algorithm>
#include <vector>void print(int i) {std::cout << i << " ";
}int main() {std::vector<int> vec = {1, 2, 3, 4, 5};// 使用 for_each 算法遍历输出容器中的元素std::for_each(vec.begin(), vec.end(), print);return 0;
}

2. std::transform(转换)

#include <iostream>
#include <algorithm>
#include <vector>int square(int i) {return i * i;
}int main() {std::vector<int> vec = {1, 2, 3, 4, 5};std::vector<int> result;// 使用 transform 算法对容器中的元素进行转换std::transform(vec.begin(), vec.end(), std::back_inserter(result), square);// 输出转换后的元素for (int i : result) {std::cout << i << " ";}return 0;
}

3. std::sort(排序)

#include <iostream>
#include <algorithm>
#include <vector>int main() {std::vector<int> vec = {3, 1, 4, 1, 5, 9, 2, 6, 5};// 使用 sort 算法对容器中的元素进行排序std::sort(vec.begin(), vec.end());// 输出排序后的元素for (int i : vec) {std::cout << i << " ";}return 0;
}

4. std::accumulate(累加)

#include <iostream>
#include <numeric>
#include <vector>int main() {std::vector<int> vec = {1, 2, 3, 4, 5};// 使用 accumulate 算法对容器中的元素进行累加int sum = std::accumulate(vec.begin(), vec.end(), 0);std::cout << "Sum: " << sum << std::endl;return 0;
}

通过这些简单的示例,你可以了解到如何使用 C++ STL 中的一些常用算法(for_each、transform、sort、accumulate),并对容器中的元素进行遍历、转换、排序和累加等操作。希望这些示例能帮助你更好地理解 STL 算法的使用。

相关文章:

  • 微信小程序事件处理
  • 操作系统内功篇:硬件结构之软中断
  • 树形递归模板
  • 面试算法-88-反转链表
  • 【软件测试_黑白盒测试】白盒测试黑盒测试 区别
  • window下安装并使用nvm(含卸载node、卸载nvm、全局安装npm)
  • [Repo Git] manifests的写法
  • 【LLM多模态】Cogvlm图生文模型结构和训练流程
  • mysql的实训操作任务指南
  • 2024.3.9|第十五届蓝桥杯模拟赛(第三期)
  • java 实现发送邮件功能
  • YoloV8改进策略:BackBone改进|PKINet
  • 基于SpringBoot的高校办公室行政事务管理系统
  • 【C++】关联式容器——map和set
  • mysql80-DBA数据库学习1
  • __proto__ 和 prototype的关系
  • Brief introduction of how to 'Call, Apply and Bind'
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • css布局,左右固定中间自适应实现
  • E-HPC支持多队列管理和自动伸缩
  • JS字符串转数字方法总结
  • leetcode-27. Remove Element
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • 闭包--闭包之tab栏切换(四)
  • 小试R空间处理新库sf
  • 怎样选择前端框架
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • ​io --- 处理流的核心工具​
  • ​ubuntu下安装kvm虚拟机
  • #ifdef 的技巧用法
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • (2)STM32单片机上位机
  • (3)llvm ir转换过程
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (SpringBoot)第二章:Spring创建和使用
  • (多级缓存)缓存同步
  • (附源码)springboot金融新闻信息服务系统 毕业设计651450
  • (汇总)os模块以及shutil模块对文件的操作
  • (未解决)macOS matplotlib 中文是方框
  • (五)c52学习之旅-静态数码管
  • (一)VirtualBox安装增强功能
  • (转)fock函数详解
  • (转)scrum常见工具列表
  • .gitattributes 文件
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题
  • .NET 应用启用与禁用自动生成绑定重定向 (bindingRedirect),解决不同版本 dll 的依赖问题
  • .net反编译工具
  • .NET框架设计—常被忽视的C#设计技巧
  • .net知识和学习方法系列(二十一)CLR-枚举
  • .Net中ListT 泛型转成DataTable、DataSet
  • [100天算法】-不同路径 III(day 73)
  • [2018][note]用于超快偏振开关和动态光束分裂的all-optical有源THz超表——