c++常用stl算法
1、头文件
这些算法通常包含在头文件<algorithm> <functional> <numeric>中。

2、常用遍历算法

for_each(v.begin(),v.end(), 元素处理函数/仿函数)

注意:在使用transform转存时,目标容器需要提取开辟合适的空间。
void printfunc(int val) {cout << val << " ";
}
class Printoperator {
public:void operator()(int val) {cout << val << " ";}
};
int main() {vector<int> vi(10, 3);//输入一般函数完成for_each算法中的元素处理for_each(vi.begin(), vi.end(), printfunc);cout << endl;//输入仿函数完成for_each算法中的元素处理for_each(vi.begin(), vi.end(), Printoperator());cout << endl;system("pause");return 0;
}
class Printoperator {
public:int operator()(int val) {return val + 1;}
};
void print(vector<int> &v) {for (auto i : v) {cout << i << " ";}cout << endl;
}
int main() {vector<int> vi(10, 3);vector<int> vi2(4, 5);//需要提前给目标容器开辟空间,不然会报错vi2.resize(vi.size());transform(vi.begin(), vi.end(), vi2.begin(), Printoperator());print(vi2);system("pause");return 0;
}
3、常用查找算法

find按值查找元素
函数原型:

使用find查找自定义类型元素的时候,需要在对应类中重载==,以便find算法能知道该怎么比较。
class Person {
public:Person(int age, string name) {this->mAge = age;this->mName = name;}//帮助find查找元素bool operator==(const Person &p) {if (p.mAge == this->mAge && p.mName == this->mName) {return true;}else {return false;}}int mAge;string mName;
};
int main() {vector<Person> v;Person p1(10, "aaa");Person p2(20, "sss");Person p3(40, "ads");Person p4(10, "ccc");v.push_back(p1);v.push_back(p2);v.push_back(p3);v.push_back(p4);vector<Person>::iterator iter = find(v.begin(), v.end(), p2);if (iter != v.end()) {cout << "逮到 !!!" << endl;}system("pause");return 0;
}
find_if按值查找元素

利用find_if按自定义谓词找到合适的自定义类型元素:
class Person {
public:Person(int age, string name) {this->mAge = age;this->mName = name;}int mAge;string mName;
};
class FindPerson {
public:bool operator()(const Person &p) {return p.mAge > 20;}
};
int main() {vector<Person> v;Person p1(10, "aaa");Person p2(20, "sss");Person p3(40, "ads");Person p4(10, "ccc");v.push_back(p1);v.push_back(p2);v.push_back(p3);v.push_back(p4);vector<Person>::iterator iter = find_if(v.begin(), v.end(), FindPerson());if (iter != v.end()) {cout << (*iter).mName<<" 的年龄超过了20" << endl;}system("pause");return 0;
}
adjacent_find查找相邻重复元素

adjacen_find按自定义谓词查找相邻满足条件自定义元素:
class Person {
public:Person(int age, string name) {this->mAge = age;this->mName = name;}int mAge;string mName;
};
class FindPerson {
public:bool operator()(const Person &p1, const Person& p2) {if (p1.mAge == p2.mAge)return true;elsereturn false;}
};
int main() {vector<Person> v;Person p1(10, "aaa");Person p2(20, "sss");Person p3(20, "sad");Person p4(40, "ads");Person p5(10, "ccc");v.push_back(p1);v.push_back(p2);v.push_back(p3);v.push_back(p4);v.push_back(p5);vector<Person>::iterator iter = adjacent_find(v.begin(), v.end(), FindPerson());if (iter != v.end()) {cout <<"有相邻年龄相同的人" << (*iter).mName <<"和" << (*(iter+1)).mName << endl;}else {cout << "没有相邻年龄相同的人" << endl;}system("pause");return 0;
}
binary_search查指定元素是否存在(不适用无序序列,必须有序且为升序序列)

count统计元素出现次数
返回int
![]()
class Person {
public:Person(int age, string name) {this->mAge = age;this->mName = name;}//帮助count查找元素bool operator==(const Person &p) {if (p.mAge == this->mAge) {return true;}else {return false;}}int mAge;string mName;
};int main() {vector<Person> v;Person p1(10, "aaa");Person p2(20, "sss");Person p3(20, "sad");Person p4(40, "ads");Person p5(10, "ccc");v.push_back(p1);v.push_back(p2);v.push_back(p3);v.push_back(p4);v.push_back(p5);int num = count(v.begin(), v.end(), p2);cout << "20岁的人有 " << num << "个" << endl;system("pause");return 0;
}
count_if 按条件统计元素个数 ,返回int

count_if的谓词使用参见find_if。
4、常用排序算法

sort排序
对自定义类型排序:
class Person {
public:Person(int age, string name) {this->mAge = age;this->mName = name;}int mAge;string mName;
};
class SortPerson {
public:bool operator()(const Person& p1, const Person& p2) {if (p1.mAge > p2.mAge)return true;elsereturn false;}
};
int main() {vector<Person> v;Person p1(10, "aaa");Person p2(20, "sss");Person p3(20, "sad");Person p4(40, "ads");Person p5(10, "ccc");v.push_back(p1);v.push_back(p2);v.push_back(p3);v.push_back(p4);v.push_back(p5);sort(v.begin(), v.end(), SortPerson());system("pause");return 0;
}
random_shuffle随机调序

int main() {vector<Person> v;Person p1(10, "aaa");Person p2(20, "sss");Person p3(20, "sad");Person p4(40, "ads");Person p5(10, "ccc");v.push_back(p1);v.push_back(p2);v.push_back(p3);v.push_back(p4);v.push_back(p5);random_shuffle(v.begin(), v.end());//cout << "20岁的人有 " << num << "个" << endl;system("pause");return 0;
}

merge合并容器元素(容器必须有序,提取个目标容器分配空间)

vector<int> vi1{ 1,2,3,4,5 };vector<int> vi2{ 2,3,4,5,7 };vector<int> target;//提前个target开辟空间target.resize((vi1.size() + vi2.size()));merge(vi1.begin(), vi1.end(), vi2.begin(), vi2.end(),target.begin());

reverse反转容器中的元素 (不需要谓词就能实现自定义类型反转)

vector<Person> v;Person p1(10, "aaa");Person p2(20, "sss");Person p3(20, "sad");Person p4(40, "ads");Person p5(10, "ccc");v.push_back(p1);v.push_back(p2);v.push_back(p3);v.push_back(p4);v.push_back(p5);reverse(v.begin(), v.end());
5、常用拷贝替换生成算法

copy拷贝(需要预先开辟空间)
注:在拷贝自定义类时,需要有对应的空默认构造函数,如:Person(){}。
vector<Person> v;Person p1(10, "aaa");Person p2(20, "sss");Person p3(20, "sad");Person p4(40, "ads");Person p5(10, "ccc");v.push_back(p1);v.push_back(p2);v.push_back(p3);v.push_back(p4);v.push_back(p5);vector<Person> target;target.resize(v.size());copy(v.begin(), v.end(), target.begin());
replace元素替换

vector<int> vi1{ 1,2,3,4,5 };replace(vi1.begin(), vi1.end(), 1, 20);

replace_if满足条件元素替换

class Person {
public:Person() {}Person(int age, string name) {this->mAge = age;this->mName = name;}int mAge;string mName;
};class ReplacePerson {
public:bool operator()(const Person& p) {if (p.mAge > 20)return true;elsereturn false;}
};
int main() {vector<Person> v;Person p1(10, "aaa");Person p2(20, "sss");Person p3(20, "sad");Person p4(40, "ads");Person p5(10, "ccc");v.push_back(p1);v.push_back(p2);v.push_back(p3);v.push_back(p4);v.push_back(p5);Person p6(10, "dsaf");replace_if(v.begin(), v.end(), ReplacePerson(), p6);system("pause");return 0;
}
swap交换容器元素

6、常用算术生成算法

accumulate计算累加
对自定义类型的某成员变量累加:(也可以采用仿函数形式)
class Person {
public:Person() {}Person(int age, string name) {this->mAge = age;this->mName = name;}int mAge;string mName;
};int Age_acc(int pre,Person& p) {return pre + p.mAge;
}
int main() {vector<Person> v;Person p1(10, "aaa");Person p2(20, "sss");Person p3(20, "sad");Person p4(40, "ads");Person p5(10, "ccc");v.push_back(p1);v.push_back(p2);v.push_back(p3);v.push_back(p4);v.push_back(p5);Person p6(10, "dsaf");int acu = accumulate(v.begin(), v.end(), 0, Age_acc);system("pause");return 0;
}
fill向容器中填充元素

7、常用集合算法

set_intersection求两个容器交集(必须预先开辟目标容器空间)

set_union求两个容器并集

set_difference求两个容器差集

相关文章:
c++常用stl算法
1、头文件 这些算法通常包含在头文件<algorithm> <functional> <numeric>中。 2、常用遍历算法 for_each(v.begin(),v.end(), 元素处理函数/仿函数) 注意:在使用transform转存时,目标容器需要提取开辟合适的空间。 void printfunc(…...
非对称密钥PKCS#1和PKCS#8格式互相转换(Java)
目录一、序言二、代码示例1、Maven依赖2、工具类封装三、测试用例1、密钥文件2、公私钥PKCS1和PKCS8格式互相转换一、序言 之前在 《前后端RSA互相加解密、加签验签、密钥对生成》 中提到过PKCS#1格式和PKCS#8格式密钥的区别以及如何生成密钥。实际有些场景中有可能也会涉及到…...
java获取当前时间的方法:LocalDateTime、Date、Calendar,以及三者的比较
文章目录前言一、LocalDateTime1.1 获取当前时间LocalDate.now()1.2 获取当前时间的年、月、日、时分秒localDateTime.getYear()……1.3 给LocalDateTime赋值LocalDateTime.of()1.4 时间与字符串相互转换LocalDateTime.parse()1.5 时间运算——加上对应时间LocalDateTime.now()…...
npm link
正文npm link的用法假如我们想自己开发一个依赖包,以便在多个项目中使用。一种可行的方法,也是npm给我们提供的标准做法,那就是我们独立开发好这个 "依赖包",然后将它直接发布到 npm镜像站 上去,等以后想在其…...
Docker 如何配置镜像加速
Docker 镜像加速 国内从 DockerHub 拉取镜像有时会遇到困难,此时可以配置镜像加速器。Docker 官方和国内很多云服务商都提供了国内加速器服务,例如: 科大镜像:https://docker.mirrors.ustc.edu.cn/网易:https://hub-…...
阅读笔记7——Focal Loss
一、提出背景 当前一阶的物体检测算法,如SSD和YOLO等虽然实现了实时的速度,但精度始终无法与两阶的Faster RCNN相比。是什么阻碍了一阶算法的高精度呢?何凯明等人将其归咎于正、负样本的不平衡,并基于此提出了新的损失函数Focal L…...
ZCMU--5009: 龙虎斗
轩轩和开开正在玩一款叫《龙虎斗》的游戏,游戏的棋盘是一条线段,线段上有n个兵营(自左至右编号1~n),相邻编号的兵营之间相隔1厘米,即棋盘为长度为n-1厘米的线段。i号兵营里有ci位工兵。 下面图1为n 6的示例: 轩轩在左侧…...
创建项目(React+umi+typeScript)
项目框架搭建的方式react脚手架Ant-design官网一、安装方式npm二、安装方式yarn三、安装方式umi devreact脚手架 命令行: npx create-react-app myReactName项目目录结构: 浏览器运行,端口号3000: Ant-design官网 一、安装方…...
FISCO BCOS(二十七)———java操作WeBase
一、搭建fiscobcos环境 1.1、安装jdk1.8 https://blog.csdn.net/weixin_46457946/article/details/1232435131.2、安装mysql https://blog.csdn.net/weixin_46457946/article/details/1232447361.3、安装python https://blog.csdn.net/weixin_46457946/article/details/123…...
失眠时还在吃它?有风险,你了解过吗
失眠,是当代人的通病。所以解决失眠也成了刚需,市面上开始出现各种助眠产品。有商业机构调查发现,62%的90后消费者曾买过助眠产品,其中人气选手就是褪黑素。褪黑素本身就是人体天然存在的,与睡眠有关的物质,…...
星戈瑞收藏Sulfo-CY7 amine/NHS ester/maleimide小鼠活体成像染料标记反应
关于小鼠活体成像,就一定要提到CY活性染料标记反应: 用不同的活性基团的Cyanine菁染料和相应的活性基团的生物分子或小分子药物发生反应,链接到一起。 根据需要标记的抗原、抗体、酶、多肽等分子所带的可标记基团的种类(氨基、醛…...
守护最后一道防线:Coremail邮件安全网关推出邮件召回功能
根据Coremail邮件安全大数据中心2022年Q4季报显示,2021年CAC识别钓鱼邮件1.81亿,2022年上升至2.25亿,增幅高达24.1%。 这表明2022年平均每天有61万7088封钓鱼邮件被接收及发出,企业用户面临潜在经济损失不可估量。 尤其是活跃至今…...
Python实战之小说下载神器(二)整本小说下载:看小说不用这个程序,我实在替你感到可惜*(小说爱好者必备)
前言 这次的是一个系列内容给大家讲解一下何一步一步实现一个完整的实战项目案例系列之小说下载神器(二)(GUI界面化程序) 单章小说下载保存数据——整本小说下载 你有看小说“中毒”的经历嘛?小编多多少少还是爱看小说…...
ChatGPT三个关键技术
情景学习(In-context learning) 对于一些LLM没有见过的新任务,只需要设计一些任务的语言描述,并给出几个任务实例,作为模型的输入,即可让模型从给定的情景中学习新任务并给出满意的回答结果。这种训练方式能…...
考试系统 (springboot+vue前后端分离)
系统图片 下载链接 地址: http://www.gxcode.top/code 介绍 一款多角色在线培训考试系统,系统集成了用户管理、角色管理、部门管理、题库管理、试题管理、试题导入导出、考试管理、在线考试、错题训练等功能,考试流程完善。 技术栈 Spr…...
ChatGPT告诉你:项目管理能干到60岁吗?
早上好,我是老原。这段时间最火的莫过于ChatGPT,从文章创作到论文写作,甚至编程序,简直厉害的不要不要的。本以为过几天热度就自然消退了,结果是愈演愈烈,热度未减……大家也从一开始得玩乐心态,…...
Python自动化测试框架【Allure-pytest功能特性介绍】
Python自动化测试框架【Allure-pytest功能特性介绍】 目录:导读 前言 生成报告 测试代码 目录结构 Allure特性 Environment Categories Fixtures and Finalizers allure.attach 总结 写在最后 前言 Allure框架是一个灵活的轻量级多语言测试报告工具&am…...
ToB 产品拆解—Temu 商家管理后台
Temu 是拼多多旗下的跨境电商平台,平台产品于9月1日上线,9月1日到9月15日为测试期,之后全量全品类放开售卖。短短几个月的时间,Temu 在 App Store 冲上了购物类榜首,引起了国内的广泛关注。本文将以 B 端产品经理的角度…...
Android Studio的笔记--socket通信
Android socket通信Socket协议android socket 代码清单文件开启服务服务端:TCPServerService客户端:TCPClientServicelogSocket Socket 作为一种通用的技术规范,首次是由 Berkeley 大学在 1983 为 4.2BSD Unix 提供的,后来逐渐演化…...
@Async 注解
异步执行 异步调用就是不用等待结果的返回就执行后面的逻辑;同步调用则需要等待结果再执行后面的逻辑。 通常我们使用异步操作时都会创建一个线程执行一段逻辑,然后把这个线程丢到线程池中去执行,代码如下所示。 ExecutorService executor…...
龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...
Android Wi-Fi 连接失败日志分析
1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...
C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...
Golang——7、包与接口详解
包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...
AI语音助手的Python实现
引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...
算法—栈系列
一:删除字符串中的所有相邻重复项 class Solution { public:string removeDuplicates(string s) {stack<char> st;for(int i 0; i < s.size(); i){char target s[i];if(!st.empty() && target st.top())st.pop();elsest.push(s[i]);}string ret…...
32位寻址与64位寻址
32位寻址与64位寻址 32位寻址是什么? 32位寻址是指计算机的CPU、内存或总线系统使用32位二进制数来标识和访问内存中的存储单元(地址),其核心含义与能力如下: 1. 核心定义 地址位宽:CPU或内存控制器用32位…...

