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

c++ algorithm中常用的几个内置函数


C++<algorithm>能用到的几个内置函数

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
void print(int &elem){	//有无&均可 
	cout << elem << " ";
}
//qsprt必须用这种格式定义比较函数,像bj定义qsort传入参数会出错
// *和(int *)是同一优先级运算符,但结合方向是从右向左
int cmp(const void *a, const void *b){ 
	return *(int *)a - *(int *)b;
}
int bj(int a, int b){ 
	return a > b;
}
int main(){
	int a[] = {0, 3, 9, 1, 4, 8, 5, 2, 6, 7};
	
	//algorithm头文件for_each( , , )函数用法
	for_each(a, a+10, print);
	cout << endl;
	
	//快排模板函数,数组下标从0开始,即排序下标为0-9的元素
	qsort(a, 10, sizeof(a[0]), cmp);
	for_each(a, a+10, print);
	cout << endl;
	
	//algorithm中的swap函数
	char x = 'X', y = 'Y';
	swap(x, y);
	printf("x = %c, y = %c\n", x, y);
	
	char str[] = "abcdefgh";
	//algorithm中的反转函数
    reverse(str+2,str+7);	//前闭后开 
    cout << str << endl;


    int aa[] = {0, 3, 9, 1, 4, 8, 5, 2, 6, 7};
	for_each(aa, aa+10, print);
	cout << endl;
	//qsort,sort时间复杂度都是O(n*log(n)),但实际中sort速度一般比qsort快!!
	// sort(aa, aa+10);
	//不传入第三个参数默认sort为升序排序
	sort(aa, aa+10, bj);
	//传入参数从大到小排序,且sort第三个参数不能用cmp函数
	for_each(aa, aa+10, print);
	
	
	cout << endl << max(66,88) << endl << min(66,88) << endl;
	//max和min函数
	
	
	//二路归并,头文件algorithm
	int ak[] = {1, 9, 5, 4, 7};
	int ka[] = {3, 6, 2, 8, 0};
	int kk[15];
	sort(ak, ak+5);
	sort(ka, ka+5);
	merge(ak, ak+5, ka, ka+5, &kk[1]);
	
	for_each(ak, ak+5, print);
	cout << endl;
	for_each(ka, ka+5, print);
	cout << endl;
	for_each(kk+1, kk+11, print);
	cout << endl;
	return 0;
}

★ vector的clear只是清空元素,而不回收空间,可以使用vector<int>().swap(vt)进行清空元素并回收内存。


相关文章:

  • circularprogressbar/smoothprogressbar开源视图使用学习
  • C/C++和JAVA 实现大数相加
  • 苹果推出开源医学研究框架ResearchKit
  • 康拓展开及其逆运算和全排列函数
  • 用R分析时间序列(time series)数据
  • QDUoj GZS的三角形 棋盘里的数学 (数学规律题)
  • N-tier architecture N层架构 (转)
  • 树状数组区间更新+区间查询+单点查询
  • PHPCMS如何实现后台访问限制?
  • 树的直径 —— 即一棵树的最长路 附题(大臣的旅费 by蓝桥杯)
  • 一个关于按位或的故事~~(QDU-码农必修)
  • ConcurrentHashMap 解读(一)
  • Today一只菜鸡的PAT甲级测试(PAT1124, PAT1125, PAT1126, PAT1127)
  • 快速排序--自行实现+qsort+sort
  • 归并排序--二路归并
  • @angular/forms 源码解析之双向绑定
  • 30天自制操作系统-2
  • CSS盒模型深入
  • eclipse(luna)创建web工程
  • java中的hashCode
  • Python利用正则抓取网页内容保存到本地
  • Python学习之路16-使用API
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • Service Worker
  • Spark学习笔记之相关记录
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • vue学习系列(二)vue-cli
  • 理解在java “”i=i++;”所发生的事情
  • 你不可错过的前端面试题(一)
  • 前嗅ForeSpider教程:创建模板
  • 使用agvtool更改app version/build
  • 使用Swoole加速Laravel(正式环境中)
  • 微信开放平台全网发布【失败】的几点排查方法
  • 项目实战-Api的解决方案
  • 一个完整Java Web项目背后的密码
  • 中文输入法与React文本输入框的问题与解决方案
  • 转载:[译] 内容加速黑科技趣谈
  • scrapy中间件源码分析及常用中间件大全
  • 扩展资源服务器解决oauth2 性能瓶颈
  • 移动端高清、多屏适配方案
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • ​业务双活的数据切换思路设计(下)
  • ![CDATA[ ]] 是什么东东
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • (2)Java 简介
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (附源码)ssm户外用品商城 毕业设计 112346
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (源码版)2024美国大学生数学建模E题财产保险的可持续模型详解思路+具体代码季节性时序预测SARIMA天气预测建模
  • (转)C#调用WebService 基础
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • .net core控制台应用程序初识