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

【STL——常用排序、拷贝与替换算法】

引入

以下常用算法均采用以下预处理指令组

#pragma once
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>

常用排序算法

sort

功能描述:对容器内元素进行排序
函数原型:

sort(iterator beg, iterator end, _Pred);
_Pred可有可无,没有时默认升序,有时就按_Pred的规则进行排序。

  • 定义用于降序排列的类
template<typename T>
class order {
public:bool operator()(T a,T b) {return a>b; //降序排列}
};
  • 功能实现
void test() {vector <int>v = { 9,12,31,44,89,1,5 };sort(v.begin(), v.end()); //升序排列for_each(v.begin(), v.end(), print01);cout << endl;sort(v.begin(), v.end(),order<int>()); //不要忘记order的参数列表for_each(v.begin(), v.end(), print01);cout << endl;
}void print01(int val) {cout << val << " ";
}
random_shuffle

功能描述:洗牌 指定范围内的元素随机调整次序
函数原型:

random_shuffle(iterator beg, iterator end);
指定范围内的元素随机调整次序
注意:如果不加种种子和随机种子的语句以及时钟头文件,会实现随机次序,但仅调整一次;加上之后每次编译都会出现新的排列顺序。

void test() {srand((unsigned int)time(NULL));vector<int> v = { 1,2,3,4,5,6,7 };random_shuffle(v.begin(), v.end());for_each(v.begin(), v.end(), print01);
}void print01(int val) {cout << val << " ";
}
merge

功能描述:两个容器元素((必须有序排列)合并,并存储到另一个容器中,合并后的容器元素也有序。
函数原型:

merge(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest);
将第一个容器的[beg1,end1)以及第二个容器的[beg2,end2)合并,并存储到dest中,但语句中应写明dest存储的位置。

void test() {vector<int> v1 = { 1,3,5,7,9 };vector<int> v2 = { 2,4,6,8 };vector<int> v3 = {33,67};v3.resize(v1.size() + v2.size());merge(v1.begin(), v1.end(), v2.begin(), v2.end(), v3.begin());for_each(v3.begin(), v3.end(), print01);
}void print01(int val) {cout << val << " ";
}
reverse

功能描述:将容器内元素进行反置
函数原型:

reverse(iterator beg, iterator end);

void test() {vector<int> v1 = { 1,3,5,7,9 };cout << "反置前:" << endl;for_each(v1.begin(), v1.end(), print01);cout << endl;cout << "反置后:" << endl;reverse(v1.begin(), v1.end());for_each(v1.begin(), v1.end(), print01);
}void print01(int val) {cout << val << " ";
}

常用拷贝与替换算法

copy

功能描述:容器内指定范围的元素拷贝到另一个容器中
函数原型:

copy(iterator beg, iterator end, iterator dest);
将开始迭代器到结束迭代器之间的元素拷贝到目标容器dest中

void test() {vector<int> v1 = { 1,3,5,7,9 };vector<int>v2;v2.resize(v1.size());copy(v1.begin(), v1.end(), v2.begin());for_each(v2.begin(), v2.end(), print01);
}void print01(int val) {cout << val << " ";
}
replace

功能描述:将容器内指定范围的旧元素替换为新元素
函数原型:

replace(iterator beg, iterator end, oldvalue, newvalue);

void test() {vector<int> v1 = {46,22,44,11,46};replace(v1.begin(), v1.end(), 46, 99); //将[begin,end)区间的46都换成99for_each(v1.begin(), v1.end(), print01);//输出:99,22,44,11,99
}void print01(int val) {cout << val << " ";
}
replace_if

功能描述:将区间内满足条件的元素,替换成指定元素
函数原型:

replace_if(iterator beg, iterator end, _pred, newvalue);
按条件替换元素,满足条件_pred的替换成指定元素newvalue

  • 定义条件
class Greater01{
public:bool operator()(int val) {return val > 40;}
};
  • 功能实现
void test() {vector<int> v1 = {46,11,44,11,46};cout << "替换前: ";for_each(v1.begin(), v1.end(), print01);cout << endl;//大于40的换成1000replace_if(v1.begin(), v1.end(), Greater01(), 1000);cout << "替换后: ";for_each(v1.begin(), v1.end(), print01);}void print01(int val) {cout << val << " ";
}
http://www.dtcms.com/a/586067.html

相关文章:

  • 网站 做实名认证吗建设银行 网站无法打开
  • S2B2C系统推荐|商淘云:以全链路数字化能力重构产业生态的深度实践
  • 北京企业网站建设推荐服装设计公司排名
  • iis7 网站用户权限超融合系统
  • 机器学习实践项目(二)- 房价预测增强篇 - 模型训练与评估:从多模型对比到小网格微调
  • 物联网协议全景图
  • 使用 PostgreSQL 继承和分区方案的实现建议
  • Redisson 的 Watchdog 机制
  • 网站建设艾金手指六六12jsp网站设计教学做一体化教程
  • 网站主页与导航栏的设计定制开发小程序报价
  • Ascend C 编程模型揭秘:深入理解核函数、任务并行与流水线优化
  • Vue3 组件库 Element Plus
  • 网站设计的资质叫什么wordpress内页打不开
  • wap网站用什么服务器建站公司主要做那些业务
  • 移动端爬虫新贵:Mitmproxy抓包与脚本化改造App请求
  • 网站群建设代理wordpress 栏目权限
  • RV1126 NO.42:OPENCV形态学基础之一:膨胀
  • 使用 Python 语言 从 0 到 1 搭建完整 Web UI自动化测试学习系列 24--数据驱动--参数化处理 Excel 文件 1
  • 如何使用ROS 2与STM32进行串口通信,并实现通过键盘按键‘1’来控制LED灯开关
  • jQuery 入门学习教程,从入门到精通, jQuery在HTML5中的应用(16)
  • Flutter TweenAnimationBuilder 使用指南
  • 快速网站搭建百度推广介绍
  • 婚纱摄影网站源码自己制作app的应用程序
  • 【经验分享】Spring Authorization Server 实现详解:构建企业级OAuth2认证中心(一)
  • 北京电脑培训网站备案号查询网站网址
  • 建可收费的网站一个网站策划需要多少钱
  • 吴恩达新课程:Agentic AI(笔记7)
  • 记录一次给Dell 10代cpu 重装系统遇到的BitLocker锁相关问题处理
  • Arbess CICD实践(2) - 使用Arbess+GitLab+PostIn实现Go项目构建/主机部署及接口自动化测试
  • 家具用品:撑起家的骨架与温度