C++相关闲碎记录(13)

1、排序算法

(1)对所有元素排序sort(), stable_sort()
#include "algostuff.hpp"using namespace std;int main() {deque<int> coll;INSERT_ELEMENTS(coll, 1, 9);INSERT_ELEMENTS(coll, 1, 9);PRINT_ELEMENTS(coll, "on entry: ");sort(coll.begin(), coll.end());PRINT_ELEMENTS(coll, "sorted: ");sort(coll.begin(), coll.end(), greater<int>());PRINT_ELEMENTS(coll, "storted > ");return 0;
}
输出:
on entry: 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 
sorted: 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9
storted > 9 9 8 8 7 7 6 6 5 5 4 4 3 3 2 2 1 1
#include "algostuff.hpp"using namespace std;bool lessLength(const string& s1, const string& s2) {return s1.length() < s2.length();
}
int main() {vector<string> coll1 = {"1xxxx", "2x", "3x", "4x", "5xx", "6xxxx", "7xx", "8xxx", "9xx", "10xxx","11", "12", "13", "14xx", "15","16","17"};vector<string> coll2(coll1);PRINT_ELEMENTS(coll1, "on entry: ");sort(coll1.begin(), coll1.end(), lessLength);stable_sort(coll2.begin(), coll2.end(), lessLength);PRINT_ELEMENTS(coll1, "with sort(): \n");PRINT_ELEMENTS(coll2, "with stable_sort(): \n");return 0;
}
输出:
on entry: 1xxxx 2x 3x 4x 5xx 6xxxx 7xx 8xxx 9xx 10xxx 11 12 13 14xx 15 16 17 
with sort():
2x 17 16 15 13 12 11 4x 3x 9xx 7xx 5xx 8xxx 14xx 10xxx 6xxxx 1xxxx
with stable_sort():
2x 3x 4x 11 12 13 15 16 17 5xx 7xx 9xx 8xxx 14xx 1xxxx 6xxxx 10xxx
(2)局部排序partial_sort(), partial_sort()
#include "algostuff.hpp"using namespace std;int main() {deque<int> coll;INSERT_ELEMENTS(coll, 3, 7);INSERT_ELEMENTS(coll, 2, 6);INSERT_ELEMENTS(coll, 1, 5);PRINT_ELEMENTS(coll);partial_sort(coll.begin(), coll.begin()+5,coll.end());PRINT_ELEMENTS(coll);partial_sort(coll.begin(), coll.begin()+5,coll.end(),greater<int>());PRINT_ELEMENTS(coll);partial_sort(coll.begin(), coll.end(),coll.end());PRINT_ELEMENTS(coll);return 0;
}
输出:
3 4 5 6 7 2 3 4 5 6 1 2 3 4 5 
1 2 2 3 3 7 6 5 5 6 4 4 3 4 5
7 6 6 5 5 1 2 2 3 3 4 4 3 4 5
1 2 2 3 3 3 4 4 4 5 5 5 6 6 7
(3)partial_sort_copy()
#include "algostuff.hpp"using namespace std;int main() {deque<int> coll1;vector<int> coll6(6);vector<int> coll30(30);INSERT_ELEMENTS(coll1, 3, 7);INSERT_ELEMENTS(coll1, 2, 6);INSERT_ELEMENTS(coll1, 1, 5);PRINT_ELEMENTS(coll1);vector<int>::const_iterator pos6;pos6 = partial_sort_copy(coll1.cbegin(), coll1.cend(),coll6.begin(), coll6.end());copy(coll6.cbegin(), pos6,ostream_iterator<int>(cout, " "));cout << endl;vector<int>::const_iterator pos30;pos30 = partial_sort_copy(coll1.cbegin(), coll1.cend(),coll30.begin(), coll30.end(),greater<int>());copy(coll30.cbegin(), pos30,ostream_iterator<int>(cout, " "));cout << endl;return 0;
}
输出:
3 4 5 6 7 2 3 4 5 6 1 2 3 4 5 
1 2 2 3 3 3
7 6 6 5 5 5 4 4 4 3 3 3 2 2 1
(4)根据第n个元素排序nth_element()
#include "algostuff.hpp"using namespace std;int main() {deque<int> coll;INSERT_ELEMENTS(coll, 3, 7);INSERT_ELEMENTS(coll, 2, 6);INSERT_ELEMENTS(coll, 1, 5);PRINT_ELEMENTS(coll);nth_element(coll.begin(), coll.begin()+3, coll.end());cout << "the four lowest elements are: ";copy(coll.cbegin(), coll.cbegin()+4, ostream_iterator<int>(cout, " "));cout << endl;nth_element(coll.begin(), coll.end()-4, coll.end());cout << "the four highest elements are: ";copy(coll.cend()-4, coll.cend(), ostream_iterator<int>(cout, " "));cout << endl;nth_element(coll.begin(), coll.begin()+3,coll.end(), greater<int>());cout << "the four highest elements are: ";copy(coll.cbegin(), coll.cbegin()+4,ostream_iterator<int>(cout, " "));cout << endl;return 0;
}
输出:
3 4 5 6 7 2 3 4 5 6 1 2 3 4 5 
the four lowest elements are: 2 1 2 3
the four highest elements are: 5 6 6 7
the four highest elements are: 6 7 6 5
(5)make_heap()、push_heap()、pop_heap()、sort_heap()
#include "algostuff.hpp"using namespace std;int main() {vector<int> coll;INSERT_ELEMENTS(coll, 3, 7);INSERT_ELEMENTS(coll, 5, 9);INSERT_ELEMENTS(coll, 1, 4);PRINT_ELEMENTS(coll, "on entry: ");make_heap(coll.begin(), coll.end());PRINT_ELEMENTS(coll, "after make_heap(): ");pop_heap(coll.begin(), coll.end());coll.pop_back();PRINT_ELEMENTS(coll, "after pop_heap(): ");coll.push_back(17);push_heap(coll.begin(), coll.end());PRINT_ELEMENTS(coll, "after push_heap(): ");sort_heap(coll.begin(), coll.end());PRINT_ELEMENTS(coll, "after sort_heap(): ");return 0;
}
输出:
on entry: 3 4 5 6 7 5 6 7 8 9 1 2 3 4 
after make_heap(): 9 8 6 7 7 5 5 3 6 4 1 2 3 4
after pop_heap(): 8 7 6 7 4 5 5 3 6 4 1 2 3
after push_heap(): 17 7 8 7 4 5 6 3 6 4 1 2 3 5
after sort_heap(): 1 2 3 3 4 4 5 5 6 6 7 7 8 17

调用make_heap之后,元素被排序为9 8 6 7 7 5 5 3 6 4 1 2 3 4

 转换为二叉树如下:

 2、已排序区间算法

(1)binary_search()
#include "algostuff.hpp"using namespace std;int main() {list<int> coll;INSERT_ELEMENTS(coll, 1, 9);PRINT_ELEMENTS(coll);if(binary_search(coll.begin(), coll.end(), 5)) {cout << "5 is present" << endl;} else {cout << "5 is not present" << endl;}if(binary_search(coll.begin(), coll.end(), 42)) {cout << "42 is present" << endl;} else {cout << "42 is not present" << endl;}return 0;
}
输出:
1 2 3 4 5 6 7 8 9 
5 is present
42 is not present
(2)检查数个元素是否存在includes()
#include "algostuff.hpp"using namespace std;int main() {list<int> coll;vector<int> search;INSERT_ELEMENTS(coll, 1, 9);PRINT_ELEMENTS(coll, "coll: ");search.push_back(3);search.push_back(4);search.push_back(7);PRINT_ELEMENTS(search, "search: ");if(includes(coll.cbegin(), coll.cend(),search.cbegin(), search.cend())) {cout << "all elements of search are also in coll" << endl;} else {cout << "not all elements of search are also in coll" << endl;}return 0;
}
输出:
coll: 1 2 3 4 5 6 7 8 9 
search: 3 4 7
all elements of search are also in coll
(3)查找第一个或者最后一个可能的位置lower_bound()、upper_bound()
#include "algostuff.hpp"using namespace std;int main() {list<int> coll;INSERT_ELEMENTS(coll, 1, 9);INSERT_ELEMENTS(coll, 1, 9);coll.sort();PRINT_ELEMENTS(coll);auto pos1 = lower_bound(coll.cbegin(), coll.cend(), 5);auto pos2 = upper_bound(coll.cbegin(), coll.cend(), 5);cout << "5 could get position "<< distance(coll.cbegin(), pos1) + 1<< " up to " << distance(coll.cbegin(), pos2) + 1<< " without breaking the sorting" << endl;coll.insert(lower_bound(coll.begin(), coll.end(), 3), 3);coll.insert(upper_bound(coll.begin(), coll.end(), 7), 7);PRINT_ELEMENTS(coll);return 0;
}
输出:
1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 
5 could get position 9 up to 11 without breaking the sorting
1 1 2 2 3 3 3 4 4 5 5 6 6 7 7 7 8 8 9 9
(4)查找第一个和最后一个可能位置equal_range()
#include "algostuff.hpp"using namespace std;int main() {list<int> coll;INSERT_ELEMENTS(coll, 1, 9);INSERT_ELEMENTS(coll, 1, 9);coll.sort();PRINT_ELEMENTS(coll);pair<list<int>::const_iterator, list<int>::const_iterator> range;range = equal_range(coll.cbegin(), coll.cend(), 5);cout << "5 could get position " << distance(coll.cbegin(), range.first) + 1<< " up to " << distance(coll.cbegin(), range.second) + 1<< " without breaking the sorting" << endl;return 0;
}
输出:
1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 
5 could get position 9 up to 11 without breaking the sorting
(5)合并元素merge()
#include "algostuff.hpp"using namespace std;int main() {list<int> coll1;set<int> coll2;INSERT_ELEMENTS(coll1, 1, 6);INSERT_ELEMENTS(coll2, 3, 8);PRINT_ELEMENTS(coll1, "coll1: ");PRINT_ELEMENTS(coll2, "coll2: ");cout << "merged: ";merge(coll1.cbegin(), coll1.cend(),coll2.cbegin(), coll2.cend(),ostream_iterator<int>(cout, " "));cout << endl; return 0;
}
输出:
coll1: 1 2 3 4 5 6 
coll2: 3 4 5 6 7 8
merged: 1 2 3 3 4 4 5 5 6 6 7 8
(6)两个已排序集合的并集set_union(),set_intersection(),set_difference(), set_symmetric_difference()
#include "algostuff.hpp"
using namespace std;int main() {vector<int> c1 = {1, 2, 2, 4, 6, 7, 7, 9};deque<int> c2 = {2, 2, 2, 3, 6, 6, 8, 9};cout << "c1: ";copy(c1.cbegin(), c1.cend(), ostream_iterator<int>(cout, " "));cout << endl;cout << "c2: ";copy(c2.cbegin(), c2.cend(), ostream_iterator<int>(cout, " "));cout << endl << endl;cout << "merged: ";merge(c1.cbegin(), c1.cend(),c2.cbegin(), c2.cend(),ostream_iterator<int>(cout, " "));cout << endl;cout << "set_union: ";set_union(c1.cbegin(), c1.cend(),c2.cbegin(), c2.cend(),ostream_iterator<int>(cout, " "));cout << endl;cout << "set_intersection()";set_intersection(c1.cbegin(), c1.cend(),c2.cbegin(), c2.cend(),ostream_iterator<int>(cout, " "));cout << endl;cout << "set_difference()";set_difference(c1.cbegin(), c1.cend(),c2.cbegin(), c2.cend(),ostream_iterator<int>(cout, " "));cout << endl;cout << "set_symmetric_difference(): ";set_symmetric_difference(c1.cbegin(), c1.cend(),c2.cbegin(), c2.cend(),ostream_iterator<int>(cout, " "));cout << endl;return 0;
}
输出:
c1: 1 2 2 4 6 7 7 9 
c2: 2 2 2 3 6 6 8 9merged: 1 2 2 2 2 2 3 4 6 6 6 7 7 8 9 9
set_union: 1 2 2 2 3 4 6 6 7 7 8 9
set_intersection()2 2 6 9
set_difference()1 4 7 7
set_symmetric_difference(): 1 2 3 4 6 7 7 8
(7)合并连贯之已排序区间inplace_merge()
#include "algostuff.hpp"using namespace std;int main() {list<int> coll;INSERT_ELEMENTS(coll, 1, 7);INSERT_ELEMENTS(coll, 1, 8);PRINT_ELEMENTS(coll);list<int>::iterator pos;pos = find(coll.begin(), coll.end(), 7);++pos;inplace_merge(coll.begin(), pos, coll.end());PRINT_ELEMENTS(coll);return 0;
}
输出:
1 2 3 4 5 6 7 1 2 3 4 5 6 7 8 
1 1 2 2 3 3 4 4 5 5 6 6 7 7 8

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/277707.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智慧电力运维系统

智慧电力运维系统是一个集成了智能化运维管理工具的系统&#xff0c;旨在提高用户侧电力运行安全&#xff0c;降低运维成本。该系统通过安装在电力设备上的多种传感器和现场监测装置&#xff0c;远程在线监测、监视电力设备的运行状态及设备周围的环境状况&#xff08;如&#…

Jmeter接口自动化测试,看完就会了。。。

前面我们复习了jmeter 的非图形化界面运行我们的测试接口。 大家可以翻看往期jmeter的文章。 具体来说就是&#xff1a;jmeter -n -t ****.jmx -l ****.jtl -e -o **** (*号代表路径&#xff09; 生成了测试报告。 但是这个非图形化运行有个缺点&#xff0c;就是只能运…

C语言:指针与数组易错辨析

前言&#xff1a; 在学校学习指针和数组的联系时&#xff0c;对指针与数组的结合产生了很大的疑惑&#xff0c;后来不断查找资料&#xff0c;本人对指针与数组的综合有了一定的理解&#xff0c;现进行综合讨论辨析 数组指针&#xff1a; 数组指针&#xff0c;即为指向数组类…

系列六、DCL

一、DCL 1.1、概述 DCL的英文全称是&#xff1a;Data Control Language&#xff0c;中文意思为&#xff1a; 数据控制语言&#xff0c;是用来管理数据库的用户以及控制用户的权限的。 1.2、管理用户 1.2.1、查询用户 select * from mysql.user; 说明&#xff1a; 其中 Host代…

C语言 简单使用qsort 比较结构体字符串大小

1.先简单调用C语言封装好的冒泡排序 #include<stdio.h> #include<stdlib.h> #include<string.h> //qsort C语言封装好的冒泡排序 可比较任何类型 struct stu{char name[20];int age; }; //用户自己写的函数。函数名字也作为函数指针使用。是qsort函数的第四…

转载: iOS 优雅的处理网络数据

转载&#xff1a; iOS 优雅的处理网络数据 原文链接&#xff1a;https://juejin.cn/post/6952682593372340237 相信大家平时在用 App 的时候, 往往有过这样的体验&#xff0c;那就是加载网络数据等待的时间过于漫长&#xff0c;滚动浏览时伴随着卡顿&#xff0c;甚至在没有网…

使用C++11开发一个半同步半异步线程池

半同步半异步线程池介绍 在处理大量并发任务的时候&#xff0c;如果按照传统的方式&#xff0c;一个请求一个线程来处理请求任务&#xff0c;大量的线程创建和销毁将消耗过多的系统资源&#xff0c;还增加了线程上下文切换的开销&#xff0c;而通过线程池技术就可以很好的解决这…

Visual Studio编辑器中C4996 ‘scanf‘: This function or variable may be unsafe.问题解决方案

目录 ​编辑 题目&#xff1a;简单的ab 1. 题目描述 2. 输入格式 3. 输出格式 4. 样例输入 5. 样例输出 6. 解题思路 7. 代码示例 8. 报错解决 方案一 方案二 方案三 方案四 总结 题目&#xff1a;简单的ab 1. 题目描述 输入两个整数a和b&#xff0c;…

海思平台isp之raw图回灌调试

文章目录 一、搭建环境二、配置参数三、回灌raw图isp调试中,经常会遇到一些特定场景的效果需要优化,但由于某些原因和成本考虑,开发人员无法亲临现场,这个时候采集场景raw图回灌到板端调试,就显得尤为方便了。 一、搭建环境 (1)建立板端与PQTool连接 板端进入SS928V100…

深圳锐科达IP网络广播系统

深圳锐科达IP网络广播系统 网络音频广播系统是一种基于TCP/IP网络的纯数字音频广播系统。该网络音频广播系统在物理结构上与标准IP网络完全集成。它不仅真正实现了基于TCP/IP网络的数字音频的广播、直播和点播&#xff0c;而且利用TCP/IP网络的优势&#xff0c;突破了传统模拟广…

Ubuntu20.04 下编译安装 ffmpeg 和 ffplay

Ubuntu20.04 下编译安装 ffmpeg 和 ffplay 一、下载源码包二、安装依赖库三、编译四、添加环境变量五、验证是否成功六、问题 一、下载源码包 1.1 官方下载链接&#xff1a;http://ffmpeg.org/download.html 最新版本为6.1&#xff0c;点击 Download Source Code下载即可 &…

AWTK 串口屏开发(2) - 数据绑定高级用法

AWTK 串口屏 智能家居示例 1. 功能 这个例子稍微复杂一点&#xff0c;界面这里直接使用了 立功科技 ZDP1440 HMI 显示驱动芯片 例子中的 UI 文件和资源&#xff0c;重点关注数据绑定。在这里例子中&#xff0c;模型&#xff08;也就是数据&#xff09;里包括一台空调和一台咖…