C++系列二:STL教程-常用算法
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
常用算法
- 前言
- 算法列举:
- 算法例子
前言
还有一些我在尝试中迷惑不解的,有点玄幻。
算法列举:
- 排序算法:
sort(first, last);
stable_sort(first, last);
partial_sort(first, middle, last);
partial_sort_copy(first, last, result_first, result_last);
nth_element (first, nth, last);
is_sorted (first, last);
is_sorted_until (first, last);
- 合并算法:
merge(first1,last1,first2,last2,result);
inplace_merge (first,middle,last);
- 查找算法:
find (first, last, val);find_if (first, last, pred);find_if_not (first, last, pred);find_end (first1, last1, first2, last2);find_first_of(first1, last1, first2, last2);adjacent_find(first, last);search(first1, last1, first2, last2);search_n(first, last, count, val);lower_bound (first, last,val);upper_bound (first, last,val);pair<ForwardIterator,ForwardIterator> equal_range (first, last, val);binary_search(first, last,val);
- 筛选分组算法:
partition (first,last,pred);
stable_partition (first,last,pred);
pair<OutputIterator1,OutputIterator2> partition_copy (first, last, result_true, result_false, pred);
partition_point(first,last,pred);
- 其他:
all_of (first,last,pred);
any_of (first,last,pred);
none_of(first,last,pred);
equal (First1, Last1, First2);
mismatch(First1, Last1, First2);
lexicographical_compare(first1, last1, first2, last2);
next_permutation(first, last);
prev_permutation(first, last)
is_permutation(First1, Last1, First2);
copy_n(first,n,result);
copy_if(first1,last,result,pred);
copy_backward(first1,last,result);
reverse_copy(first1,last,result);
unique(it_1,it_2,MyFunc);
rotate(first,middle,last);
rotate_copy(first,middle,last,last);
move();
swap_ranges(First1, Last1, First2);
remove(first1,last1,value);
remove_copy(first,last,result,value);
remove_if(first,last,result,value);
remove_copy_if(first,last,result,pred);
fill(first, last,val);
fill_n(first,n,value);
generate(first,last,gen);
generate_n(first,last,gen);transform(first1,last1,first1,result,binary_op)
replace(_First,_Last,_OldVal,_NewVal);
replace_if(_First,_Last,_Pred,_Val);
replace_copy(_First,_Last,_Result,_OldVal,_NewVal);
replace_copy_if_if(_First,_Last,_Result,_Pred,_Val);
算法例子
vector<int> vec{ 3, 2, 5, 4, 1, 6, 9, 7 };
vector<int> vecCopy(5);
vector<int> vecFirst{1,3,5,7};
vector<int> vecSecond{ 2,4,6,8 };
vector<int> vecMerge(8);
vector<int> vecInplace{ 5,10,15,20,25,7,17,27,37,47,57 };
for (int i: vecInplace) {cout << i;}//1. 排序
// Compare: less<int>()、 greater<int>()、[](int a,int b) {return a<b;} 升序
// 默认升序//sort() 排序
sort(vec.begin(), vec.end());
sort(vec.begin(), vec.end(),less<int>())//stable_sort() 还可以保证不改变相等元素的相对位置。//partial_sort() 从指定区域中提取出部分数据 对它们进行排序
partial_sort(vec.begin(), vec.begin() + 4, vec.end());// 最小的 4 个元素移动到开头位置并排好序
partial_sort(vec.begin(), vec.begin() + 4, vec.end(), [](int a, int b) {return a > b; });//????不太懂//partial_sort_copy() 不对原有数据变动,将部分元素拷贝到另外的数组或容器中,然后再对这部分元素进行排序。
partial_sort_copy(vec.begin(),vec.end(),vec1.begin(),vecCopy.begin()+5);//nth_element() 该函数可以从某个序列中找到第 n 小的元素 K,并将 K 移动到序列中第 n 的位置处。
//整个序列经过 nth_element() 函数处理后,所有位于 K 之前的元素都比 K 小,所有位于 K 之后的元素都比 K 大。
nth_element(vec.begin(), vec.begin() + 2, vec.end()); //? ? ? ? 不太懂//is_sorted()判断其是否已经排序好
bool flag = is_sorted(vec.begin(), vec.end());//is_sorted_until() 不仅能检测出某个序列是否有序,还会返回一个正向迭代器,该迭代器指向的是当前序列中第一个破坏有序状态的元素。
vector<int>::iterator demo = is_sorted_until(vec.begin(),vec.end()); cout << *demo;//2.合并
//merge()将两个有序集合合并为一个有序序列
merge(vecFirst.begin(),vecFirst.end(),vecSecond.begin(),vecSecond.end(), vecMerge.begin());//inplace_merge() 当 2 个有序序列存储在同一个数组或容器中时,如果想将它们合并为 1 个有序序列 (我觉得有病,直接一个排序不就得了,真是折腾。)
inplace_merge(vecInplace.begin(), vecInplace.begin() + 5, vecInplace.begin() + 11);//3.查找
//find() 用于在指定范围内查找和目标元素值相等的第一个元素。
cout << *find(vec.begin(),vec.end(),5);//find_if()、find_if_not() 符合规则;不符合规则
cout << *find_if(vec.begin(), vec.end(), [](int i) {return ((i % 2) == 0); });//????不太懂//有点费力,下次再来。//一元转换和二元转换 用于转换元素//vector<int> vec1{ 3, 2, 5, 4, 1, 6, 9, 7 };//vector<int> vec2{ 3, 2, 5, 4, 1, 6, 9, 7 };//vector<int> vecTransform(8, 0);//transform(vec1.begin(), vec1.begin()+5, vec2.begin(), [](int i) {return i + 1; });//transform(vec1.begin(), vec1.end(), vec2.begin(), vecTransform.begin(), [](int a, int b) {return a + b; });//for (int i : vecTransform) { cout<<i; }//replace() 替换//vector<int> vecRep1{ 3, 2, 5, 4, 1, 6, 9, 7 };//vector<int> vecRep2(8);//replace(vecRep1.begin(),vecRep1.end(),1,100);//replace_copy(vecRep1.begin(), vecRep1.end(),vecRep2.begin(),1,100);//replace_if(vecRep1.begin(), vecRep1.end(), [](int i) {return i > 3; },100 );//replace_copy_if(vecRep1.begin(), vecRep1.end(), vecRep2.begin(), [](int i) {return i > 3; }, 100);//for (int i: vecRep2) { cout << i; }// generate()、fill() 赋值//vector<int> vecG(5);//int flag = 1;//generate(vecG.begin(), vecG.end(), [&flag]() {return flag++; });//generate_n(vecG.begin(),3, [&flag]() {return flag++; });//fill(vecG.begin(), vecG.end(), 1);//fill_n(vecG.begin(),3, 1);//for (int i :vecG) { cout << i; };// remove() 素覆盖它来实现移除的????大疑问//vector<int> vecRe{1, 2, 3, 4,5};//vector<int> vecRe2(5);//remove(vecRe.begin(),vecRe.end(),3); //12455 //remove_copy(vecRe.begin(),vecRe.end(), vecRe2.begin(),3); //12450 //remove_if(vecRe.begin(), vecRe.end(), [](int i) {return i = 4; });//remove_copy_if(vecRe.begin(), vecRe.end(), vecRe2.begin(), [](int i) {return i = 4; });//for (auto i : vecRe){cout << i;}//for_each()循环vector<int> vecFor{1, 2, 3, 4, 5};for_each(vecFor.begin(), vecFor.end(), [](int i) {cout << i; });
相关文章:
C++系列二:STL教程-常用算法
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 常用算法 前言算法列举:算法例子 前言 还有一些我在尝试中迷惑不解的,有点玄幻。 算法列举: 排序算法: sort(first, last);…...

【css】渐变
渐变是设置一种颜色或者多种颜色之间的过度变化。 两种渐变类型: 线性渐变(向下/向上/向左/向右/对角线) 径向渐变(由其中心定义) 1、线性渐变 语法:background-image: linear-gradient(direction, co…...

idea打开多个项目需要开多个窗口(恢复询问弹窗)
【版权所有,文章允许转载,但须以链接方式注明源地址,否则追究法律责任】【创作不易,点个赞就是对我最大的支持】 前言 仅作为学习笔记,供大家参考 总结的不错的话,记得点赞收藏关注哦! 使用…...
篇十三:策略模式:选择不同算法
篇十三:“策略模式:选择不同算法” 设计模式是软件开发中的重要知识,策略模式(Strategy Pattern)是一种行为型设计模式,用于在运行时根据不同的需求选择不同的算法或行为。本文将探讨策略模式的作用和实现…...

Centos7.6 安装mysql过程全记录
在centos 7.6上 离线安装mysql 的步骤,可参考下文: 一、查看当前MySQL的安装情况并卸载 1. 查看当前MySQL的安装情况 查找之前是否安装了MySQL rpm -qa|grep -i mysql 2.卸载mysql 如果已经安装mysql,则需要先停止MySQL,再删除…...
Java中的Guava是什么?
Java中的Guava是一个非常强大的Java库,它提供了很多实用的工具类和方法,可以帮助我们更高效地开发Java应用程序。从新手的角度来看,Guava可以让我们在Java编程中变得更加简单、快速和高效。 Guava的命名来源于“Google’s favorite Java lib…...
vue.js兄弟组件方法调用b组件调用a组件方法
vue.js 中兄弟组件方法调用 场景:父组件中同时引入两个子组件(A和B),此时B组件点击按钮需要调用A组件里面的方法 方案1:vue的事件总线 方案2:自定义事件($emit) 最终方案:…...
【Kubernetes】二进制搭建
目录 二进制搭建 Kubernetes v1.20 操作系统初始化配置 关闭防火墙 关闭selinux 关闭swap 根据规划设置主机名 在master添加hosts 调整内核参数 时间同步 部署 etcd 集群 准备签发证书环境 准备cfssl证书生成工具 生成Etcd证书 上传 etcd-cert.sh 和 etcd.sh 到 …...

【MFC】08.MFC消息,自定义消息,常用控件(MFC菜单创建大总结),工具栏,状态栏-笔记
本专栏上几篇文章讲解了MFC几大机制,今天带领大家学习MFC自定义消息以及常用控件,最常用的控件请查看本专栏第一二篇文章,今天这篇文章介绍工具栏,菜单和状态栏,以及菜单创建大总结。 文章目录 MFC消息分类࿱…...

Clickhouse 数据存储
一、数据分区 数据是以分区目录的形式组织的,每个分区独立分开存储.这种形式,查询数据时,可以有效的跳过无用的数据文件。 1.1 数据分区的规则 分区键的取值,生成分区ID,分区根据ID决定。根据分区键的数据类型不同&am…...

c语言每日一练(3)
前言:每日一练系列,每一期都包含5道选择题,2道编程题,博主会尽可能详细地进行讲解,令初学者也能听的清晰。每日一练系列会持续更新,暑假时三天之内必有一更,到了开学之后,将看学业情…...
java基础-Stream(流)、File(文件)和IO
Java中的流(Stream)提供了一个统一的接口来处理输入和输出数据,文件(File)提供了一种简单的方式来操作磁盘上的文件,而I/O则允许我们在Java程序中读写数据。 一、流Stream java中得stream是一种抽象概念,流可以从多种来源读取数据ÿ…...

el-table实现指定列合并
table传入span-method方法可以实现合并行或列,方法的参数是一个对象,里面包含当前行row、当前列column、当前行号rowIndex、当前列号columnIndex四个属性。该函数可以返回一个包含两个元素的数组,第一个元素代表rowspan,第二个元素…...

38.利用matlab解 有约束无约束的参数估计对比(matlab程序)
1.简述 1.离散型随机变量的极大似然估计法: (1) 似然函数 若X为离散型, 似然函数为 (2) 求似然函数L(θ)的最大值点 θ, 则θ就是未知参数的极大似然估计值. 2.连续型随机变量的极大似然估计法: (1) 似然函数 若 X 为连续型, 似然函数为 (2) 求似然函数L(θ)的最大值点θ, 则…...

什么是React?React与VU的优缺点有哪些?
什么是React?什么是VUE? 维基百科上的概念解释,Vue.js是一个用于创建用户界面的开源MVVM前端JavaScript框架,也是一个创建单页应用的Web应用框架。Vue.js由尤雨溪(Evan You)创建,由他和其他活跃…...

区块链技术助力慈善,为您的善举赋予全新力量!
我们怀揣着一颗温暖的心,秉承着公开透明的理念,带着信任与责任,倾力打造了一套区块链技术驱动的去中心化捐赠与物资分发系统,通过智能生态网络(IEN)解决捐赠不透明问题的系统,让您的善举直接温暖…...

模拟实现消息队列项目(系列4) -- 服务器模块(内存管理)
目录 前言 1. 创建MemoryDataCenter 2. 封装Exchange 和 Queue方法 3. 封装Binding操作 4. 封装Message操作 4.1 封装消息中心集合messageMap 4.2 封装消息与队列的关系集合queueMessageMap的操作 5. 封装未确认消息集合waitMessage的操作 6. 从硬盘中恢复数据到内存中 7. Memo…...

STM32 LoRa源码解读
目录结构: SX1278 |-- include | |-- fifo.h | |-- lora.h | |-- platform.h | |-- radio.h | |-- spi.h | |-- sx1276.h | |-- sx1276Fsk.h | |-- sx1276FskMisc.h | |-- sx1276Hal.h | |-- sx1276LoRa.h | -- sx1276LoRaMisc.h – src |-- fifo.c |-- lora.c |-- …...
【BASH】回顾与知识点梳理(十)
【BASH】回顾与知识点梳理 十 十. 文件的格式化与相关处理10.1 格式化打印: printf10.2 awk:好用的数据处理工具awk 的逻辑运算字符 10.3 文件比对工具diffcmppatch 10.4 文件打印准备: pr 该系列目录 --> 【BASH】回顾与知识点梳理&#…...

【网络】应用层——HTTPS协议
🐱作者:一只大喵咪1201 🐱专栏:《网络》 🔥格言:你只管努力,剩下的交给时间! HTTPS协议 🍉HTTP的不安全性🍉认识HTTPS协议🍓加密解密ἵ…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求ÿ…...

CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式
今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...
C#中的CLR属性、依赖属性与附加属性
CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...