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

C++ <algorithm>标准库常用算法

algorithm头文件是 C 标准模板库STL的“军火库”里面包含了大约 100 多个函数模板。掌握其中 10-15 个核心算法就能覆盖 90% 的日常开发需求让你彻底告别繁琐的手写for循环。为了方便记忆我把它们分成了四大类1. 排序与重排类 (让数据有序)这是algorithm最强大的功能之一。std::sort作用快速排序默认升序。常用场景几乎所有需要排序的地方。配合 Lambda 表达式可以轻松实现自定义排序比如按结构体成员排序。std::reverse作用将区间内的元素反转。常用场景字符串反转、倒序遍历前的预处理。std::unique作用去除相邻的重复元素注意它不会改变容器大小通常配合erase使用即“擦除-移除惯用法”。常用场景去重。代码示例// 先排序再去重std::sort(v.begin(),v.end());autolaststd::unique(v.begin(),v.end());v.erase(last,v.end());// 真正删除2. 查找与统计类 (寻找目标)比手写循环查找更语义化。std::find/std::find_if作用查找等于某值的元素 / 查找满足条件的元素。常用场景在vector或list中找特定项。std::count/std::count_if作用统计某值出现的次数 / 统计满足条件的元素个数。常用场景统计日志中错误出现的次数、统计及格人数等。std::lower_bound/std::upper_bound作用二分查找。在已排序的区间中查找第一个“不小于”或“大于”某值的元素位置。常用场景在大量有序数据中快速定位时间复杂度仅为 O(log N)。3. 修改与操作类 (数据处理)用来对数据进行批量“手术”。std::transform作用对区间内的每个元素执行操作并将结果存入新容器。常用场景把vectorint里的每个数都平方、把字符串全转大写。代码示例std::vectorintnums{1,2,3};std::vectorintresult;// 每个元素 * 2std::transform(nums.begin(),nums.end(),std::back_inserter(result),[](intn){returnn*2;});std::replace/std::replace_if作用将满足条件的元素替换为新值。常用场景把数组里的所有0换成1。std::copy/std::copy_if作用复制元素到另一个容器。常用场景数据过滤只复制偶数到新数组。4. 逻辑判断类 (全员体检)C11 引入的神器专门配合 Lambda 使用。std::all_of作用检查是否所有元素都满足条件。常用场景检查全班是否都及格了。std::any_of作用检查是否存在任意一个元素满足条件。常用场景检查列表中是否有负数。std::none_of作用检查是否没有元素满足条件。常用场景检查是否没有非法字符。 速查表算法名核心功能记忆口诀sort排序万物皆可排find_if查找找到第一个符合条件的count_if计数数数有多少个transform变换批量加工、映射for_each遍历对每个元素执行操作remove移除逻辑删除需配合 erasereverse反转颠倒顺序all_of判断是否全员满足lower_bound二分查找找位置需有序 专家建议原则能用算法的地方就不要写for循环。可读性看到std::sort大家都知道是排序看到for(int i0...)还得读里面的逻辑才知道是在排序。性能标准库算法通常经过了高度优化比自己写的循环更快。安全性避免了手写循环容易出现的越界、死循环等错误。你可以先从std::sort和std::find_if开始慢慢在代码里替换掉那些重复的循环逻辑。如果你能熟练运用这些标准库算法说明你的代码正在从“能跑就行”向“优雅高效”迈进。 为什么感觉用得少这其实非常正常主要有两个原因思维惯性我们学习编程时最先掌握的是for循环和if判断。遇到查找或排序需求时手写循环是最直接、最“本能”的反应。不了解“武器库”C 标准库是一个非常强大的“武器库”algorithm头文件里就有几十种现成的、经过高度优化的算法。如果不刻意学习和使用很容易忽略它们的存在。 从“手写循环”到“使用算法”让我们看一个例子体会一下使用std::find_if和手写循环的区别。场景在一个数字列表中找到第一个大于 100 的数。 方式一手写for循环#includevector#includeiostreamintmain(){std::vectorintnumbers{10,50,120,80,200};inttarget100;intresult-1;// 用一个特殊值表示没找到for(inti0;inumbers.size();i){if(numbers[i]target){resultnumbers[i];break;// 找到第一个就跳出}}if(result!-1){std::cout找到了: resultstd::endl;}else{std::cout没找到std::endl;}return0;} 方式二使用std::find_if Lambda#includevector#includeiostream#includealgorithm// 别忘了这个头文件intmain(){std::vectorintnumbers{10,50,120,80,200};inttarget100;// 意图一目了然在范围内查找满足条件的元素autoitstd::find_if(numbers.begin(),numbers.end(),[target](intn){returnntarget;});if(it!numbers.end()){std::cout找到了: *itstd::endl;}else{std::cout没找到std::endl;}return0;}✨ 使用标准算法的优势对比一下你会发现使用std::find_if有几个明显的好处意图更清晰函数名find_if直接告诉阅读代码的人“我要查找”而不需要去分析for循环内部的逻辑。代码更简洁省去了循环变量、边界检查和手动break的样板代码。不易出错标准库算法经过了千锤百炼比自己手写的循环更可靠不容易出现差一错误off-by-one error等问题。性能更优标准库的实现通常经过了极致优化性能往往优于我们自己写的版本。所以感觉用得少只是一个阶段。从现在开始有意识地在代码中尝试使用algorithm里的工具你的代码会变得越来越精炼和专业。这正是一个优秀程序员的成长之路

相关文章:

C++ <algorithm>标准库常用算法

<algorithm> 头文件是 C 标准模板库&#xff08;STL&#xff09;的“军火库”&#xff0c;里面包含了大约 100 多个函数模板。 掌握其中 10-15 个核心算法&#xff0c;就能覆盖 90% 的日常开发需求&#xff0c;让你彻底告别繁琐的手写 for 循环。 为了方便记忆&#xff0…...

Qwen Pixel Art快速上手:3分钟完成Docker部署,5分钟生成第一张可商用像素图

Qwen Pixel Art快速上手&#xff1a;3分钟完成Docker部署&#xff0c;5分钟生成第一张可商用像素图 1. 为什么选择Qwen Pixel Art 如果你需要快速生成高质量的像素艺术图像&#xff0c;Qwen Pixel Art可能是目前最便捷的解决方案。这个基于Qwen-Image-2512模型和Pixel Art Lo…...

暗黑2存档编辑神器:5分钟解锁单机模式的无限可能

暗黑2存档编辑神器&#xff1a;5分钟解锁单机模式的无限可能 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 你是否曾梦想在暗黑破坏神2中拥有完美的角色&#xff1f;是否厌倦了反复刷装备的枯燥过程&#xff1f;d2s-editor这款…...

如何快速掌握B站视频下载:终极指南解锁4K大会员内容

如何快速掌握B站视频下载&#xff1a;终极指南解锁4K大会员内容 【免费下载链接】bilibili-downloader B站视频下载&#xff0c;支持下载大会员清晰度4K&#xff0c;持续更新中 项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-downloader 想要将B站上的优质视频…...

网盘直链下载助手:八大平台免费高速下载的完整解决方案

网盘直链下载助手&#xff1a;八大平台免费高速下载的完整解决方案 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼…...

从零到一:在RK3588 Android12上实战RTL8723DU WiFi蓝牙双模驱动移植

1. 开篇&#xff1a;为什么需要RTL8723DU驱动移植&#xff1f; 最近在折腾RK3588开发板时&#xff0c;发现原厂Android12系统居然不支持RTL8723DU这个WiFi蓝牙双模模块。这就像买了辆跑车却发现油箱盖打不开——硬件明明在那里&#xff0c;就是用不了。不过别担心&#xff0c;经…...

OpenHRMS企业级人力资源管理系统架构解析与深度指南

OpenHRMS企业级人力资源管理系统架构解析与深度指南 【免费下载链接】OpenHRMS 项目地址: https://gitcode.com/gh_mirrors/op/OpenHRMS OpenHRMS是一款基于Odoo框架构建的开源企业级人力资源管理系统&#xff0c;采用模块化架构设计&#xff0c;为企业提供从员工入职到…...

LaserGRBL激光雕刻软件:从零开始的完整使用指南

LaserGRBL激光雕刻软件&#xff1a;从零开始的完整使用指南 【免费下载链接】LaserGRBL Laser optimized GUI for GRBL 项目地址: https://gitcode.com/gh_mirrors/la/LaserGRBL LaserGRBL是一款专为GRBL控制器设计的激光雕刻软件&#xff0c;它为激光雕刻爱好者提供了一…...

LFM2.5-1.2B-Thinking多模态扩展:结合OpenCV的图像理解应用

LFM2.5-1.2B-Thinking多模态扩展&#xff1a;结合OpenCV的图像理解应用 1. 引言 想象一下&#xff0c;你正在开发一个智能系统&#xff0c;需要让AI理解图片内容并做出智能回应。传统方案要么需要庞大的计算资源&#xff0c;要么效果不尽如人意。现在&#xff0c;有了LFM2.5-…...

Qwen3.5-2B保姆级部署教程:Ubuntu/CentOS系统supervisorctl重启详解

Qwen3.5-2B保姆级部署教程&#xff1a;Ubuntu/CentOS系统supervisorctl重启详解 1. 模型简介 Qwen3.5-2B是阿里云推出的轻量化多模态基础模型&#xff0c;属于Qwen3.5系列的小参数版本&#xff08;20亿参数&#xff09;。该模型主打低功耗、低门槛部署&#xff0c;特别适配端…...

如何在3分钟内完成Windows与Office智能激活:KMS_VL_ALL_AIO完整指南

如何在3分钟内完成Windows与Office智能激活&#xff1a;KMS_VL_ALL_AIO完整指南 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 你是否曾经因为Windows或Office的激活问题而烦恼&#xff1f;当系…...

Linux平台哔哩哔哩客户端终极指南:开源移植与完整功能体验

Linux平台哔哩哔哩客户端终极指南&#xff1a;开源移植与完整功能体验 【免费下载链接】bilibili-linux 基于哔哩哔哩官方客户端移植的Linux版本 支持漫游 项目地址: https://gitcode.com/gh_mirrors/bi/bilibili-linux 想在Linux系统上获得与Windows/macOS相同的哔哩哔…...

告别论文格式噩梦:南航学位论文LaTeX模板3步搞定专业排版

告别论文格式噩梦&#xff1a;南航学位论文LaTeX模板3步搞定专业排版 【免费下载链接】nuaathesis LaTeX document class for NUAA, supporting bachelor/master/PH.D thesis in Chinese/English/Japanese. 南航本科、硕士、博士学位论文 LaTeX 模板 项目地址: https://gitco…...

虚拟化对比

虚拟化对比 一、对比 基于物理硬件的虚拟化&#xff0c; VMware基于操作系统 的虚拟划&#xff0c; hyper-v项目VMwarehyper-v基于硬件技术、intel vt-x操作系统、 hyper-v性能优秀性能弱资源预分配动态分配linux 系统友好不友好二、 适用 VMware 适用于通用&#xff0c;对性能…...

如何用paraphrase-multilingual-MiniLM-L12-v2在90天内降低多语言内容处理成本60%

如何用paraphrase-multilingual-MiniLM-L12-v2在90天内降低多语言内容处理成本60% 【免费下载链接】paraphrase-multilingual-MiniLM-L12-v2 项目地址: https://ai.gitcode.com/hf_mirrors/ai-gitcode/paraphrase-multilingual-MiniLM-L12-v2 paraphrase-multilingual-…...

【FastAPI】Swagger UI 静态资源本地化部署:从CDN依赖到自给自足

1. 为什么需要本地化部署Swagger UI&#xff1f; 当你用FastAPI开发完一个接口服务&#xff0c;第一件事可能就是打开/docs页面测试接口。但有没有遇到过这种情况&#xff1a;公司内网服务器突然断网&#xff0c;Swagger页面变成空白&#xff1b;或是海外CDN加载缓慢&#xff…...

接收迭代器begin函数的返回值为什么只能是复制

思考&#xff1a;代码为什么编译报错#include <iostream> #include <vector> #include <algorithm>vector<string> v4 {"null", "null", "null", "null", "null"}; fill_n(v4.begin(), 2, "h…...

Universal Manipulation Interface: Bridging the Gap Between Human Demonstrations and Robot Learning

1. 为什么我们需要通用操作接口&#xff1f; 想象一下&#xff0c;你正在教一个完全不懂中文的外国人包饺子。你可以选择两种方式&#xff1a;第一种是让他戴上VR头盔&#xff0c;通过虚拟现实模仿你的动作&#xff1b;第二种是直接让他观察你的手法然后自己尝试。这两种方法听…...

出口欧盟 CE 认证实操干货|避坑指南

对于出口欧盟的产品从业者、外贸技术人员而言&#xff0c;CE认证是产品合规入市的核心前提&#xff0c;也是最易踩坑的环节。多数从业者因混淆CE认证本质、误解合规要求&#xff0c;导致货物被扣、罚款等损失。本文精简核心实操要点&#xff0c;摒弃冗余表述&#xff0c;聚焦CE…...

数据中心光互联的‘隐形守护者’:深入聊聊MEMS光开关在DCI和OXC里的那些实战配置与选型心得

数据中心光互联的‘隐形守护者’&#xff1a;深入聊聊MEMS光开关在DCI和OXC里的那些实战配置与选型心得 在数据中心流量每年以30%以上速度增长的今天&#xff0c;光互联技术正面临前所未有的挑战。作为光网络架构师&#xff0c;我们常常需要在不增加机架空间的前提下&#xff0…...

Trae 深度评测 - 从VSCode迁移者的视角,看AI如何重塑开发工作流

1. 从VSCode到Trae&#xff1a;一个老司机的真实迁移体验 作为一个在VSCode上摸爬滚打5年的老用户&#xff0c;第一次听说Trae时我的反应和大多数人一样&#xff1a;"又一个想挑战VSCode的编辑器&#xff1f;"但当我真正用Trae完成了一个中型前端项目后&#xff0c;这…...

Windows Cleaner:终极C盘空间清理指南,告别系统卡顿与存储危机

Windows Cleaner&#xff1a;终极C盘空间清理指南&#xff0c;告别系统卡顿与存储危机 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服&#xff01; 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 你是否曾因C盘爆红而焦虑&a…...

Kandinsky-5.0-I2V-Lite-5s从零部署:JDK1.8环境下的Java客户端开发

Kandinsky-5.0-I2V-Lite-5s从零部署&#xff1a;JDK1.8环境下的Java客户端开发 1. 引言 还在用JDK1.8开发企业级应用&#xff1f;想集成最新的Kandinsky-5.0-I2V-Lite-5s图像转视频模型却担心兼容性问题&#xff1f;这篇教程就是为你准备的。我们将从零开始&#xff0c;手把手…...

2025物联网通信毕业设计:聚焦LoRa与ZigBee的智慧农业创新应用

1. 为什么选择LoRa与ZigBee做智慧农业&#xff1f; 最近几年帮学生指导毕业设计时&#xff0c;发现越来越多的同学开始关注智慧农业这个方向。说实话&#xff0c;这个选题确实很值得做——既能结合当下热门的物联网技术&#xff0c;又能解决实际农业生产中的痛点。在众多无线通…...

如何用SunnyUI快速构建现代化WinForm应用:终极C界面开发指南

如何用SunnyUI快速构建现代化WinForm应用&#xff1a;终极C#界面开发指南 【免费下载链接】SunnyUI SunnyUI.NET 是基于.NET Framework 4.0、.NET6、.NET8、.NET9 框架的 C# WinForm UI、开源控件库、工具类库、扩展类库、多页面开发框架。 项目地址: https://gitcode.com/gh…...

iperf3高级玩法:用这些参数组合,精准定位你的网络瓶颈(含TCP/UDP对比测试)

iperf3高级玩法&#xff1a;用参数组合精准定位网络瓶颈 当视频会议频繁卡顿、文件传输速度异常缓慢时&#xff0c;大多数人的第一反应是"网络带宽不够"。但真实情况往往复杂得多——可能是TCP拥塞控制策略不适应高延迟链路&#xff0c;或是UDP流被路由器限速&#x…...

C# DevExpress 控件高效开发指南(1)

1. DevExpress控件入门指南 第一次接触DevExpress控件时&#xff0c;我被它丰富的功能惊艳到了。记得当时接手一个医疗管理系统项目&#xff0c;客户要求界面要美观、操作要流畅&#xff0c;还要支持复杂的数据展示。用了DevExpress后&#xff0c;开发效率直接翻倍&#xff0c…...

3个简单步骤快速解决Jellyfin元数据插件MetaShark安装与使用问题

3个简单步骤快速解决Jellyfin元数据插件MetaShark安装与使用问题 【免费下载链接】jellyfin-plugin-metashark jellyfin电影元数据插件 项目地址: https://gitcode.com/gh_mirrors/je/jellyfin-plugin-metashark Jellyfin电影元数据插件MetaShark是一款专为Jellyfin媒体…...

复旦微FM33 MCU 底层开发实战——从寄存器到外设精通

1. 初识复旦微FM33系列MCU 第一次拿到复旦微FM33LC0XX开发板时&#xff0c;我和大多数嵌入式开发者一样&#xff0c;习惯性地打开标准外设库开始写代码。但很快发现&#xff0c;当需要实现特定功能或优化性能时&#xff0c;库函数的封装反而成了障碍。这就像开车时只能使用自动…...

Phi-4-mini-reasoning教育应用效果:学生答题路径模拟与错误归因分析

Phi-4-mini-reasoning教育应用效果&#xff1a;学生答题路径模拟与错误归因分析 1. 模型简介与教育应用价值 Phi-4-mini-reasoning是一个基于合成数据构建的轻量级开源模型&#xff0c;专注于高质量、密集推理的数据处理能力。作为Phi-4模型家族的一员&#xff0c;它特别适合…...