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

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(), 元素处理函数/仿函数) 注意&#xff1a;在使用transform转存时&#xff0c;目标容器需要提取开辟合适的空间。 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的用法假如我们想自己开发一个依赖包&#xff0c;以便在多个项目中使用。一种可行的方法&#xff0c;也是npm给我们提供的标准做法&#xff0c;那就是我们独立开发好这个 "依赖包"&#xff0c;然后将它直接发布到 npm镜像站 上去&#xff0c;等以后想在其…...

Docker 如何配置镜像加速

Docker 镜像加速 国内从 DockerHub 拉取镜像有时会遇到困难&#xff0c;此时可以配置镜像加速器。Docker 官方和国内很多云服务商都提供了国内加速器服务&#xff0c;例如&#xff1a; 科大镜像&#xff1a;https://docker.mirrors.ustc.edu.cn/网易&#xff1a;https://hub-…...

阅读笔记7——Focal Loss

一、提出背景 当前一阶的物体检测算法&#xff0c;如SSD和YOLO等虽然实现了实时的速度&#xff0c;但精度始终无法与两阶的Faster RCNN相比。是什么阻碍了一阶算法的高精度呢&#xff1f;何凯明等人将其归咎于正、负样本的不平衡&#xff0c;并基于此提出了新的损失函数Focal L…...

ZCMU--5009: 龙虎斗

轩轩和开开正在玩一款叫《龙虎斗》的游戏&#xff0c;游戏的棋盘是一条线段&#xff0c;线段上有n个兵营(自左至右编号1~n)&#xff0c;相邻编号的兵营之间相隔1厘米&#xff0c;即棋盘为长度为n-1厘米的线段。i号兵营里有ci位工兵。 下面图1为n 6的示例: 轩轩在左侧&#xf…...

创建项目(React+umi+typeScript)

项目框架搭建的方式react脚手架Ant-design官网一、安装方式npm二、安装方式yarn三、安装方式umi devreact脚手架 命令行&#xff1a; npx create-react-app myReactName项目目录结构&#xff1a; 浏览器运行&#xff0c;端口号3000&#xff1a; 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…...

失眠时还在吃它?有风险,你了解过吗

失眠&#xff0c;是当代人的通病。所以解决失眠也成了刚需&#xff0c;市面上开始出现各种助眠产品。有商业机构调查发现&#xff0c;62%的90后消费者曾买过助眠产品&#xff0c;其中人气选手就是褪黑素。褪黑素本身就是人体天然存在的&#xff0c;与睡眠有关的物质&#xff0c…...

星戈瑞收藏Sulfo-CY7 amine/NHS ester/maleimide小鼠活体成像染料标记反应

关于小鼠活体成像&#xff0c;就一定要提到CY活性染料标记反应&#xff1a; 用不同的活性基团的Cyanine菁染料和相应的活性基团的生物分子或小分子药物发生反应&#xff0c;链接到一起。 根据需要标记的抗原、抗体、酶、多肽等分子所带的可标记基团的种类&#xff08;氨基、醛…...

守护最后一道防线:Coremail邮件安全网关推出邮件召回功能

根据Coremail邮件安全大数据中心2022年Q4季报显示&#xff0c;2021年CAC识别钓鱼邮件1.81亿&#xff0c;2022年上升至2.25亿&#xff0c;增幅高达24.1%。 这表明2022年平均每天有61万7088封钓鱼邮件被接收及发出&#xff0c;企业用户面临潜在经济损失不可估量。 尤其是活跃至今…...

Python实战之小说下载神器(二)整本小说下载:看小说不用这个程序,我实在替你感到可惜*(小说爱好者必备)

前言 这次的是一个系列内容给大家讲解一下何一步一步实现一个完整的实战项目案例系列之小说下载神器&#xff08;二&#xff09;&#xff08;GUI界面化程序&#xff09; 单章小说下载保存数据——整本小说下载 你有看小说“中毒”的经历嘛&#xff1f;小编多多少少还是爱看小说…...

ChatGPT三个关键技术

情景学习&#xff08;In-context learning&#xff09; 对于一些LLM没有见过的新任务&#xff0c;只需要设计一些任务的语言描述&#xff0c;并给出几个任务实例&#xff0c;作为模型的输入&#xff0c;即可让模型从给定的情景中学习新任务并给出满意的回答结果。这种训练方式能…...

考试系统 (springboot+vue前后端分离)

系统图片 下载链接 地址&#xff1a; http://www.gxcode.top/code 介绍 一款多角色在线培训考试系统&#xff0c;系统集成了用户管理、角色管理、部门管理、题库管理、试题管理、试题导入导出、考试管理、在线考试、错题训练等功能&#xff0c;考试流程完善。 技术栈 Spr…...

ChatGPT告诉你:项目管理能干到60岁吗?

早上好&#xff0c;我是老原。这段时间最火的莫过于ChatGPT&#xff0c;从文章创作到论文写作&#xff0c;甚至编程序&#xff0c;简直厉害的不要不要的。本以为过几天热度就自然消退了&#xff0c;结果是愈演愈烈&#xff0c;热度未减……大家也从一开始得玩乐心态&#xff0c…...

Python自动化测试框架【Allure-pytest功能特性介绍】

Python自动化测试框架【Allure-pytest功能特性介绍】 目录&#xff1a;导读 前言 生成报告 测试代码 目录结构 Allure特性 Environment Categories Fixtures and Finalizers allure.attach 总结 写在最后 前言 Allure框架是一个灵活的轻量级多语言测试报告工具&am…...

ToB 产品拆解—Temu 商家管理后台

Temu 是拼多多旗下的跨境电商平台&#xff0c;平台产品于9月1日上线&#xff0c;9月1日到9月15日为测试期&#xff0c;之后全量全品类放开售卖。短短几个月的时间&#xff0c;Temu 在 App Store 冲上了购物类榜首&#xff0c;引起了国内的广泛关注。本文将以 B 端产品经理的角度…...

Android Studio的笔记--socket通信

Android socket通信Socket协议android socket 代码清单文件开启服务服务端&#xff1a;TCPServerService客户端&#xff1a;TCPClientServicelogSocket Socket 作为一种通用的技术规范&#xff0c;首次是由 Berkeley 大学在 1983 为 4.2BSD Unix 提供的&#xff0c;后来逐渐演化…...

@Async 注解

异步执行 异步调用就是不用等待结果的返回就执行后面的逻辑&#xff1b;同步调用则需要等待结果再执行后面的逻辑。 通常我们使用异步操作时都会创建一个线程执行一段逻辑&#xff0c;然后把这个线程丢到线程池中去执行&#xff0c;代码如下所示。 ExecutorService executor…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架&#xff08;一&#xff09; 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

嵌入式学习笔记DAY33(网络编程——TCP)

一、网络架构 C/S &#xff08;client/server 客户端/服务器&#xff09;&#xff1a;由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序&#xff0c;负责提供用户界面和交互逻辑 &#xff0c;接收用户输入&#xff0c;向服务器发送请求&#xff0c;并展示服务…...

使用Spring AI和MCP协议构建图片搜索服务

目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式&#xff08;本地调用&#xff09; SSE模式&#xff08;远程调用&#xff09; 4. 注册工具提…...

微服务通信安全:深入解析mTLS的原理与实践

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、引言&#xff1a;微服务时代的通信安全挑战 随着云原生和微服务架构的普及&#xff0c;服务间的通信安全成为系统设计的核心议题。传统的单体架构中&…...

针对药品仓库的效期管理问题,如何利用WMS系统“破局”

案例&#xff1a; 某医药分销企业&#xff0c;主要经营各类药品的批发与零售。由于药品的特殊性&#xff0c;效期管理至关重要&#xff0c;但该企业一直面临效期问题的困扰。在未使用WMS系统之前&#xff0c;其药品入库、存储、出库等环节的效期管理主要依赖人工记录与检查。库…...

C++--string的模拟实现

一,引言 string的模拟实现是只对string对象中给的主要功能经行模拟实现&#xff0c;其目的是加强对string的底层了解&#xff0c;以便于在以后的学习或者工作中更加熟练的使用string。本文中的代码仅供参考并不唯一。 二,默认成员函数 string主要有三个成员变量&#xff0c;…...

python打卡第47天

昨天代码中注意力热图的部分顺移至今天 知识点回顾&#xff1a; 热力图 作业&#xff1a;对比不同卷积层热图可视化的结果 def visualize_attention_map(model, test_loader, device, class_names, num_samples3):"""可视化模型的注意力热力图&#xff0c;展示模…...