C++ STL(2)--算法(2)
算法(2)----STL里的排序函数。
1. sort: 对容器或普通数组中指定范围内的元素进行排序,默认进行升序排序。
sort函数是基于快速排序实现的,属于不稳定排序。
只支持3种容器:array、vector、deque。
如果容器中存储的是自定义的对象,则该类必须提供移动构造函数和移动赋值运算符。
代码示例:
class AA
{int* m_pValue;
public:AA(int v) :m_pValue(new int(v)) {}//拷贝构造函数AA(const AA& other) {if (0 != other.m_pValue) {this->m_pValue = new int(*other.m_pValue);}else {this->m_pValue = 0;}}//析构函数~AA() {delete m_pValue;}//移动构造函数AA(AA&& other) noexcept : m_pValue(other.m_pValue) {other.m_pValue = 0;}//移动赋值操作符AA& operator = (AA&& other) noexcept {if (this != &other) {delete m_pValue;m_pValue = other.m_pValue;other.m_pValue = 0;}return *this;}//比较操作符bool operator < (AA& other) {if (0 != this->m_pValue && 0 != other.m_pValue) {return *this->m_pValue < *other.m_pValue;}return false;}void Print() {if (0 != this->m_pValue) {cout << *this->m_pValue << " ";}else {cout << "null" << " ";}}
};int main() {std::vector<AA> v1{ 5,6,9,8,3,2,1,4 };for_each(v1.begin(), v1.end(), mem_fun_ref(&AA::Print));cout << endl;sort(v1.begin(), v1.end());for_each(v1.begin(), v1.end(), mem_fun_ref(&AA::Print));return 0;
}
2. stable_sort: 排序后保证相等元素的相对位置和排序前是一样的。
stable_sort函数是基于归并排序实现的,属于稳定排序。用法和sort一样。
3. partial_sort(first, middle, last)
从指定范围内选出(middle-first)个最小的元素并排序存放在 [first,middle) 区间。
代码示例:
void printInt(int val)
{cout << val << " ";
}
int main() {std::vector<int> v1{ 3,2,5,4,1,6,9,8 };for_each(v1.begin(), v1.end(), printInt);cout << endl;//将v1中最小的 3 个元素移动到开头位置并排好序partial_sort(v1.begin(), v1.begin() + 3, v1.end());for_each(v1.begin(), v1.end(), printInt);return 0;
}
4. partial_sort_copy(first, last, result_first, result_last)
从指定范围内选出(result_last-result_first)个元素排序后拷贝到另一个容器。
代码示例:
void printInt(int val)
{cout << val << " ";
}
int main() {int target[4] = { 0 };std::vector<int> v1{ 3,2,5,4,1,6,9,8 };//将v1中前面5个元素排序,然后拷贝3个元素到targetpartial_sort_copy(v1.begin(), v1.begin() + 5, target, target + 3);for_each(target, target + 4, printInt);return 0;
}
5. nth_element (first, nth, last)
找到[first, last)范围内按照排序规则(默认升序)位于第nth个位置处的元素,并将其放置到此位
置。同时使所有比此元素小的元素在左侧,比它大的元素在右侧。
void printInt(int val)
{cout << val << " ";
}
int main() {std::vector<int> v1{ 8,1,3,4,5,6,0,2,7,9 };//默认升序排序nth_element(v1.begin(), v1.begin() + 2, v1.end());cout << "nth_element排序" << endl;for_each(v1.begin(), v1.end(), printInt);return 0;
}
6. partition (first, last, pred)
根据用户自定义的筛选规则,重新排列指定区域内存储的数据,使其分为 2 组,第一组为符合
筛选条件的数据,另一组为不符合筛选条件的数据。返回第二组的第一个元素。
代码示例:
void printInt(int val)
{cout << val << " ";
}
bool compare(int i) { return (i % 2) == 0; }
int main() {std::vector<int> v1{ 1,2,3,4,5,6,7,8,9 };auto bound = partition(v1.begin(), v1.end(), compare);//按奇偶分组cout << "bound = " << *bound<<endl;for_each(v1.begin(), v1.end(), printInt);return 0;
}
7. stable_partition (first, last, pred)
保证对指定区域内数据完成分组的同时,不改变各组内元素的相对位置。用法和partition一样。
8. is_sorted (first, last, comp)
此函数专门用于判断某个序列是否为有序序列。
代码示例:
bool compare(int i, int j) { return i > j; }
int main() {std::vector<int> v1{ 9, 8, 7, 6, 2 };cout << "v1 is sorted? " << is_sorted(v1.begin(), v1.end(), compare) << endl;return 0;
}
相关文章:
C++ STL(2)--算法(2)
算法(2)----STL里的排序函数。 1. sort: 对容器或普通数组中指定范围内的元素进行排序,默认进行升序排序。 sort函数是基于快速排序实现的,属于不稳定排序。 只支持3种容器:array、vector、deque。 如果容器中存储的是自定义的对象ÿ…...

格密码基础:对偶格(超全面)
目录 一. 对偶格的格点 1.1 基本定义 1.2 对偶格的例子 1.3 对偶格的图形理解 二. 对偶格的格基 2.1 基本定义 2.2 对偶格的格基证明 三. 对偶格的行列式 3.1 满秩格 3.2 非满秩格 四. 重复对偶格 五. 对偶格的转移定理(transference theoremÿ…...
ECMAScript简介及特性
ECMAScript是一种由ECMA国际(前身为欧洲计算机制造商协会)制定和发布的脚本语言规范,JavaScript在它基础上进行了自己的封装。ECMAScript和JavaScript的关系是,前者是后者的规格,后者是前者的一种实现。 ECMAScript的…...

csdn中的资源文件如何删除?
csdn中的资源文件如何删除? 然后写文章的时候 点击资源绑定,解锁资源,就可以再次上传。...
NA原理及配置
在IP地址空间中,a;b;c类地址中各有一部分地址,被称为私有IP地址(私网地址),其余的为公有IP地址(公网地址) A:10.0.0.0 - 10.255.255.255 --- 相当于1条A类网段…...

解决:TypeError: ‘tuple’ object does not support item assignment
解决:TypeError: ‘tuple’ object does not support item assignment 文章目录 解决:TypeError: tuple object does not support item assignment背景报错问题报错翻译报错位置代码报错原因解决方法方法一:方法二:今天的分享就到…...

vue3项目中axios的常见用法和封装拦截(详细解释)
1、axios的简单介绍 Axios是一个基于Promise的HTTP客户端库,用于浏览器和Node.js环境中发送HTTP请求。它提供了一种简单、易用且功能丰富的方式来与后端服务器进行通信。能够发送常见的HTTP请求,并获得服务端返回的数据。 此外,Axios还提供…...

基础语法(一)(1)
常量和表达式 在这里,我们可以把Python当成一个计算器,来进行一些算术运算 例如: print(1 2 - 3) print(1 2 * 3) print(1 2 / 3)注意: print是一个python内置的函数,这个稍后我们会进行介绍 可以使用-*/&…...

YOLOv8模型yaml结构图理解(逐层分析)
前言 YOLO-V8(官网地址):https://github.com/ultralytics/ultralytics 一、yolov8配置yaml文件 YOLOv8的配置文件定义了模型的关键参数和结构,包括类别数、模型尺寸、骨架(backbone)和头部(hea…...

【大数据】Zookeeper 集群及其选举机制
Zookeeper 集群及其选举机制 1.安装 Zookeeper 集群2.如何选取 Leader 1.安装 Zookeeper 集群 我们之前说了,Zookeeper 集群是由一个领导者(Leader)和多个追随者(Follower)组成,但这个领导者是怎么选出来的…...
Redis 过期策略
我们在set key的时候可以设置key的过期时间,哪redis是怎么处理过期的key的呢? 有三种过期策略 定时过期:每个设置过期时间的key会创建一个定时器,到过期时间就会立即对key进行清除。该策略可以立即清除过期的数据,对…...

RT_Thread 调试笔记:串口打印、MSH控制台 相关
说明:记录日常使用 RT_Thread 开发时做的笔记。 持续更新中,欢迎收藏。 1.打印相关 1.打印宏定义,可以打印打印所在文件,函数,行数。 #define PRINT_TRACE() printf("-------%s:%s:%d------\r\n", __FIL…...

(适趣AI)Vue笔试题
📑前言 本文主要是【Vue】——(适趣AI)Vue笔试题的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是听风与他🥇 ☁️博客首页:CSDN主页听风与他 …...
Matytype的安装问题(word及PPT报错问题)
特别针对:mathtype安装了多次,又卸载了多次的用户。 Word报弹错错误:参考 mathtype安装后,打开word出现没找到dll的错误,这个问题较好解决。 如何解决MathType兼容Office 2016-MathType中文网 PPT(PowerPoi…...

docker拉取镜像提示 remote trust data does not exist for xxxxxx
1、How can I be sure that I am pulling a trusted image from docker 2、docker: you are not authorized to perform this operation: server returned 401. 以上两个问题可以试试以下解决办法 DOCKER_CONTENT_TRUSTfalse 本人是使用jenkins部署自己的项目到docker容器出现…...
ElasticSearch Nested类型全文检索、聚合查询
ElasticSearch Nested类型全文检索、聚合查询 Nested类型全文检索 创建索引 PUT /products1 {"mappings": {"properties": {"fulltext": {"type": "text"},"name": {"type": "text","…...

专业级的渗透测试服务,助力航空业数字化安全启航
某知名航空公司是中国首批民营航空公司之一,运营国内外航线200多条,也是国内民航最高客座率的航空公司之一。在数字化发展中,该航空公司以数据驱动决策,通过精细化管理、数字创新和模式优化等方式,实现了精准营销和个…...

【docker】安装 Redis
查看可用的 redis版本 docker search redis拉取 redis最新镜像 docker pull redis:latest查看本地镜像 docker images创建挂在文件 mkdir -pv /test1/docker_volume/redis/datamkdir -pv /test1/docker_volume/redis/confcd /test1/docker_volume/redis/conf/touch redis.con…...
pinia的独立维护,统一导出及持久化
目录 1.说明及示例 2.注意 1.说明及示例 在src下创建store文件夹,在store文件夹下创建index.js文件,内容如下: import { createPinia } from "pinia"; // pinia的持久化 import piniaPluginPersistedstate from "pinia-pl…...

【AI视野·今日Robot 机器人论文速览 第六十七期】Mon, 1 Jan 2024
AI视野今日CS.Robotics 机器人学论文速览 Mon, 1 Jan 2024 Totally 16 papers 👉上期速览✈更多精彩请移步主页 Daily Robotics Papers MURP: Multi-Agent Ultra-Wideband Relative Pose Estimation with Constrained Communications in 3D Environments Authors A…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...

企业大模型服务合规指南:深度解析备案与登记制度
伴随AI技术的爆炸式发展,尤其是大模型(LLM)在各行各业的深度应用和整合,企业利用AI技术提升效率、创新服务的步伐不断加快。无论是像DeepSeek这样的前沿技术提供者,还是积极拥抱AI转型的传统企业,在面向公众…...

高效的后台管理系统——可进行二次开发
随着互联网技术的迅猛发展,企业的数字化管理变得愈加重要。后台管理系统作为数据存储与业务管理的核心,成为了现代企业不可或缺的一部分。今天我们要介绍的是一款名为 若依后台管理框架 的系统,它不仅支持跨平台应用,还能提供丰富…...

SQL注入篇-sqlmap的配置和使用
在之前的皮卡丘靶场第五期SQL注入的内容中我们谈到了sqlmap,但是由于很多朋友看不了解命令行格式,所以是纯手动获取数据库信息的 接下来我们就用sqlmap来进行皮卡丘靶场的sql注入学习,链接:https://wwhc.lanzoue.com/ifJY32ybh6vc…...
shell脚本质数判断
shell脚本质数判断 shell输入一个正整数,判断是否为质数(素数)shell求1-100内的质数shell求给定数组输出其中的质数 shell输入一个正整数,判断是否为质数(素数) 思路: 1:1 2:1 2 3:1 2 3 4:1 2 3 4 5:1 2 3 4 5-------> 3:2 4:2 3 5:2 3…...

Qt 按钮类控件(Push Button 与 Radio Button)(1)
文章目录 Push Button前提概要API接口给按钮添加图标给按钮添加快捷键 Radio ButtonAPI接口性别选择 Push Button(鼠标点击不放连续移动快捷键) Radio Button Push Button 前提概要 1. 之前文章中所提到的各种跟QWidget有关的各种属性/函数/方法&#…...