【C++中的STL】常用算法1——遍历算法和查找算法
常用算法1
- 常用算法
- 常用遍历算法
- for_each
- transform
- 常用查找算法
- find
- find_if
- adjacent_find
- binary_search
- count
- count_if
常用算法
算法主要是由头文件<algorithm><functional><numeric>组成。
<algorithm>是所有STL头文件中最大的一个,范围涉及到比较、交换、查找、遍历操作、复制、修改等等。
<numeric>体积很小,只包括几个在序列上面进行简单数学运算的模板函数。
<functional>定义了一些模板类用以声明函数对象。
常用遍历算法
1、for_each遍历容器
2、transform搬运容器到另一个容器中
for_each
for_each(iterator beg,interator end,_func);遍历算法,遍历容器元素,beg开始迭代器,end结束迭代器,_func函数或者函数对象
//普通函数
void p1(int val) {cout << val << " ";
}
//仿函数
class p2 {
public:void operator()(int val) {cout << val << " ";}
};
void test() {...//普通函数for_each(v.begin(), v.end(),p1);cout << endl;cout << "-----------------------------------------" << endl;//仿函数for_each(v.begin(), v.end(), p2());
}

transform
transform(iterator beg1,interator end1,interator beg2,_func);beg1源容器开始迭代器,end源容器结束迭代器,beg2目标容器开始迭代器,_func函数或者函数对象
//输出仿函数
class p1 {
public:void operator()(int val) {cout << val << " ";}
};//加100仿函数
class p2 {
public:int operator()(int val) {return val+100;}
};
void test() {vector<int> v;v.push_back(12);v.push_back(32);v.push_back(57);v.push_back(22);v.push_back(65);vector<int>v1;v1.resize(v.size());//目标容器必须提前开辟空间transform(v.begin(), v.end(), v1.begin(),p2());for_each(v1.begin(), v1.end(), p1());
}

常用查找算法
1、find查找元素
2、find_if按条件查找元素
3、adjacent_find查找相邻重复元素
4、binary_search二分查找法
5、count统计元素个数
6、count_if按条件统计元素个数
find
查找指定元素,找到返回指定元素的迭代器,找不到返回结束迭代器end()
find(iterator beg,interator end,value);按值查找元素,找到返回指定位置迭代器,找不到返回结束迭代器位置,beg开始迭代器,end结束迭代器,value查找的元素
void test() {//内置数据类型vector<int> v;v.push_back(12);v.push_back(32);v.push_back(57);v.push_back(22);v.push_back(65);vector<int>::iterator ret = find(v.begin(), v.end(), 32);if (ret != v.end()) {cout << "找到" << endl;}else {cout << "没有找到" << endl;}//自定义类型vector<S> v1;S s1("Tom", 13);S s2("Ala", 32);S s3("Tony", 15);S s4("Mary", 18);S s5("Mola", 23);v1.push_back(s1);v1.push_back(s2);v1.push_back(s3);v1.push_back(s4);vector<S>::iterator ret1 = find(v1.begin(), v1.end(), s5);if (ret1 != v1.end()) {cout << "找到" << endl;}else {cout << "没有找到" << endl;}
}
find_if
find_if(iterator beg,interator end,_Pred);按值查找元素,找到返回指定位置迭代器,找不到返回结束迭代器位置,beg开始迭代器,end结束迭代器,_Pred函数或者谓词(返回bool类型的仿函数)
void test() {//内置数据类型...vector<int>::iterator ret = find_if(v.begin(), v.end(), p1());if (ret != v.end()) {cout << "找到" << endl;}else {cout << "没有找到" << endl;}...vector<S>::iterator ret1 = find_if(v1.begin(), v1.end(), p2());if (ret1 != v1.end()) {cout << "找到" << endl;}else {cout << "没有找到" << endl;}
}
adjacent_find
查找相邻重复元素
adjacent_find(iterator beg,interator end);查找相邻重复元素,返回相邻元素的第一个位置的迭代器,beg开始迭代器,end结束迭代器
void test() {//内置数据类型vector<int> v;v.push_back(12);v.push_back(32);v.push_back(12);v.push_back(22);v.push_back(65);vector<int>::iterator ret = adjacent_find(v.begin(), v.end());if (ret != v.end()) {cout << "找到相邻的元素:"<<*ret << endl;}else {cout << "没有找到相邻的元素" << endl;}
binary_search
二分查找法,查找指定的元素,查到返回true,否则false
binary_search(iterator beg,interator end,value);在无序序列中不可用,beg开始迭代器,end结束迭代器,value查找的元素
count
统计元素个数
count(iterator beg,interator end,value);统计元素出现次数,beg开始迭代器,end结束迭代器,value统计的元素
void test() {//内置数据类型vector<int> v;...v.push_back(50);...v.push_back(50);v.push_back(50);int ret = count(v.begin(), v.end(),1);cout <<"1的个数:" << ret << endl;vector<S> v1;...S s4("Mary", 18);S s5("Mola", 18);...int ret1 = count(v1.begin(), v1.end(), s5);cout << "年龄为18的个数:" << ret1 << endl;
count_if
按条件统计元素个数
count_if(iterator beg,interator end,_Pred);按条件统计元素出现次数,beg开始迭代器,end结束迭代器,_Pred谓词
//内置数据类型vector<int> v;v.push_back(10);v.push_back(20);v.push_back(50);v.push_back(30);v.push_back(40);v.push_back(50);v.push_back(50);int ret = count_if(v.begin(), v.end(),p1());cout <<"大于等于40的个数:" << ret << endl;vector<S> v1;S s1("Tom", 13);S s2("Ala", 32);S s3("Tony", 15);S s4("Mary", 18);S s5("Mola", 18);v1.push_back(s1);v1.push_back(s2);v1.push_back(s3);v1.push_back(s4);v1.push_back(s5);int ret1 = count_if(v1.begin(), v1.end(), p2());cout << "年龄大于等于18的个数:" << ret1 << endl;

相关文章:
【C++中的STL】常用算法1——遍历算法和查找算法
常用算法1 常用算法常用遍历算法for_eachtransform 常用查找算法findfind_ifadjacent_findbinary_searchcountcount_if 常用算法 算法主要是由头文件<algorithm><functional><numeric>组成。 <algorithm>是所有STL头文件中最大的一个,范围…...
Jmeter性能测试: 基于JDK 21 安装 Jmeter 5.6.3
目录 一、实验 1.环境 2.JDK下载 3.Jmeter下载 4.Windows安装JDK 21 5.Windows安装Jmeter 5.6.3 6.Linux安装JDK 21 7.Linux安装Jmeter 5.6.3 二、问题 1. Linux 的profile、bashrc、bash_profile文件有哪些区别 一、实验 1.环境 (1)主机 表…...
Linux命令-apropos命令(在 whatis 数据库中查找字符串)
补充说明 apropos命令 在一些特定的包含系统命令的简短描述的数据库文件里查找关键字,然后把结果送到标 准输出。 如果你不知道完成某个特定任务所需要命令的名称,可以使用一个关键字通过Linux apropos实用程 序来搜索它。该实用程序可以搜索关键字并且…...
【算法】解决动态规划问题的通用步骤思路及示例算法:打家劫舍【动态规划】
动态规划(Dynamic Programming,简称DP)是一种解决问题的算法设计技术,通常用于优化问题。它通过将问题分解为更小的子问题,并解决这些子问题,然后合并它们的解决方案来解决原始问题。动态规划通常用于具有重叠子问题和最优子结构性质的问题。 动态规划的主要思想是避免重…...
蓝桥杯之即约分数
求1~N的所有即约分数 公约数求法:可以使用欧几里得除法求得公约数 算法原理: a,b为两个整数,a>b a除以b的商q1和余数r1 如果r1为0,则最大公约数就为b 如果不为0,则继续使用b除以r取商为q2,余r2 如果r2为0࿰…...
Pointnet++改进优化器系列:全网首发Sophia优化器 |即插即用,实现有效涨点
简介:1.该教程提供大量的首发改进的方式,降低上手难度,多种结构改进,助力寻找创新点!2.本篇文章对Pointnet++特征提取模块进行改进,加入Sophia优化器,提升性能。3.专栏持续更新,紧随最新的研究内容。 目录 1.理论介绍 2.修改步骤 2.1 步骤一 2.2 步骤二 2.3...
1.27回溯(中等)
1.全排列 全排列 II 1.给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 2.给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。 示例 1: 输入:nums [1,2,3…...
sql管理工具archery简介
在平时的工作过程中,我们肯定会遇到使用sql平台的场景,业内也有很多工具,类似阿里云的dms,但是这个是和云厂商绑定的,我们可能一般没有用到阿里云组件就比较困难了,那还有什么选项了,经过调研&a…...
DEM高程地形瓦片数据Cesium使用教程
一、简介 从开始写文章到现在,陆续发布了全球90m、30m(包括哥白尼及ALOS)、12.5m全球级瓦片数据,以及中国12.5、日本10m、新西兰8m、等国家级瓦片数据,同时也发布了台湾20m、中国34省区12.5m等地区级瓦片数据。在数据发布的文章中对数据如何…...
3个精美的wordpress律师网站模板
暗红色WordPress律师事务所网站模板 演示 https://www.zhanyes.com/qiye/23.html 暗橙色WordPress律师网站模板 演示 https://www.zhanyes.com/qiye/18.html 红色WordPress律所网站模板 演示 https://www.zhanyes.com/qiye/22.html...
在windows环境下安装hadoop
Hadoop是一个分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。但这个架构是基于java语言开发的,所以要先进行jdk的安装,如果电脑已经配置过jdk或者是曾经运行成功过java文件,那就可以跳过第一步。 …...
大数据分析组件Hive-集合数据结构
Hive的数据结构 前言一、array数组类型二、map键值对集合类型三、struct结构体类型 前言 Hive是一个基于Hadoop的数据仓库基础设施,用于处理大规模分布式数据集。它提供了一个类似于SQL的查询语言(称为HiveQL),允许用户以类似于关…...
单核QPS近6000S,陌陌基于OceanBase的持久化缓存探索与实践
挚文集团于 2011 年 8 月推出了陌陌,这款立足地理位置服务的开放式移动视频社交应用在中国社交平台领域内独树一帜。陌陌和探探作为陌生人社交领域的主流应用,涵盖了多种核心业务模块,包括直播服务、附近动态功能、即时通讯(IM&am…...
关于css 的基础试题
CSS是什么的缩写? A. Creative Style SheetsB. Cascading Style SheetsC. Computer Style SheetsD. Colorful Style Sheets 在HTML中,通过什么标签引入CSS样式? A. <script>B. <style>C. <link>D. <css> 以下哪个选项…...
Keil-C语言小总结
1、 &取地址符,*取地址内容 int *ptr;//声明指针 2、ptr &c; // 将c的地址赋值给指针变量ptr 3、可选参数函数 4、C宏定义 5、 memset:最快的数据清零函数 void *memset(void *s, int ch, size_t n); 分别是 字符串 要值的数据(0…...
react的withRouter高阶组件:
withRouter的作用就是, 如果我们某个东西不是一个Router, 但是我们要依靠它去跳转一个页面, 比如点击页面的logo, 返回首页, 这时候就可以使用withRouter来做. 在 React Router 中,withRouter 是一个函数,用于与路由相关的组件。它接受一个组件作为参数&…...
小程序 样式 WXSS
文章目录 样式 WXSS尺⼨单位样式导⼊选择器⼩程序中使⽤less 样式 WXSS WXSS( WeiXin Style Sheets )是⼀套样式语⾔,⽤于描述 WXML 的组件样式。 与 CSS 相⽐,WXSS 扩展的特性有: 响应式⻓度单位 rpx样式导⼊ 尺⼨单位 rpx (…...
LLM之RAG实战(二十一)| 使用LlamaIndex的Text2SQL和RAG的功能分析产品评论
亚马逊和沃尔玛等电子商务平台上每天都有大量的产品评论,这些评论是反映消费者对产品情绪的关键接触点。但是,企业如何从庞大的数据库获得有意义的见解? 我们可以使用LlamaIndex将SQL与RAG(Retrieval Augmented Generation&#x…...
Scikit-learn (sklearn)速通 -【莫凡Python学习笔记】
视频教程链接:【莫烦Python】Scikit-learn (sklearn) 优雅地学会机器学习 视频教程代码 scikit-learn官网 莫烦官网学习链接 本人matplotlib、numpy、pandas笔记 1 为什么学习 Scikit learn 也简称 sklearn, 是机器学习领域当中最知名的 python 模块之一. Sk…...
支持向量机(SVM)详解
支持向量机(support vector machines,SVM)是一种二分类模型。它的基本模型是定义在特征空间上的间隔最大的线性分类器,间隔最大使它有别于感知机。 1、线性可分支持向量机与硬间隔最大化 1.1、线性可分支持向量机 考虑一个二分…...
利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...
前端导出带有合并单元格的列表
// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...
STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...
QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...
什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
以光量子为例,详解量子获取方式
光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学(silicon photonics)的光波导(optical waveguide)芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中,光既是波又是粒子。光子本…...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...
Caliper 负载(Workload)详细解析
Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...
掌握 HTTP 请求:理解 cURL GET 语法
cURL 是一个强大的命令行工具,用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中,cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...
