C++常用算法模板(附代码)

注:代码有问题评论区里说

目录

1、代码

2、用法

1、代码

可根据实际情况修改

运行要求:#include<bits/stdc++.h> using namespace std;

namespace toolbox{//汇总成一个namespace,方便调用及代码美观 
	void read(int &x){//快读-只允许数字! 
		int back=0;
		char tmp='a';
		bool fushu=0;
		while(!(tmp>='0'&&tmp<='9')){
			tmp=getchar();
			if(tmp=='-'){
				fushu=1;
			}
		}
		while(tmp>='0'&&tmp<='9'){
			back=(back<<3)+(back<<1);
			back+=tmp-'0';
			tmp=getchar();
		}
		if(fushu){
			x=-back;
		}
		else{
			x=back;
		}
	}
	void read_arr(int x[],int s,int e){//输入数组 
		for(int i=s;i<=e;i++){
			read(x[i]);
		}
	}
	void print_arr(int x[],int s,int e,string separate,string end_print){//输出数组 
		for(int i=s;i<=e;i++){
			cout << x[i] << separate;
		}
		cout << end_print;
	}
	void Clear(int x[],int s,int e){//清空数组 
		for(int i=s;i<=e;i++){
			x[i]=0;
		}
	} 
	int er_fen(int x[],int s,int e,int FIND){//二分 
		while(s<e){
//		cout << s << "," << e << endl; 
			int mid=(s+e)/2;
			if(x[mid]==FIND) return mid;
			if(x[mid]>FIND){
				e=mid-1;
			}
			else{
				s=mid+1;
			}
		}
		return -1;
	}
	int pow(int x,int y){//快速幂 
		int back=1;
		while(y>0){
			if(y%2==1){
				back=(back*x);
			}
			y/=2;
			x=(x*x);
		}
		return back;
	}
	bool sushu(int x){//素数判断 
		if(x<=1){
			return 0;
		}
		for(int i=2;i<=sqrt(x);i++){
			if(x%i==0){
				return 0;
			}
		}
		return 1;
	}
	void aishi(int n,bool x[]){//埃氏筛法 
		for(int i=2;i<=n;i++){
			x[i]=1;
		}
		for(int i=2;i<=n;i++){
			if(x[i]){
				for(int j=2*i;j<=n;j+=i){
					x[j]=0;
				}
			}
		}
	}
	void Diff_arr(int yuan[],int diff_new[],int s,int e){//差分 
		for(int i=s;i<=e;i++){
			if(i==0){
				diff_new[i]=yuan[i];
			}
			else{
				diff_new[i]=yuan[i]-yuan[i-1];
			}
		}
	}
	void Sum_arr(int yuan[],int sum_new[],int s,int e){//前缀和 
		for(int i=s;i<=e;i++){
			if(i==0){
				sum_new[i]=yuan[i];
			}
			else{
				sum_new[i]=yuan[i]+sum_new[i-1];
			}
		}
	}
	int Sum(int x[],int s,int e){//数组区间求和 
		int back=0;
		for(int i=s;i<=e;i++){
			back+=x[i];
		}
		return back;
	}
}

2、用法

2.1 read

功能:快读(int类型数字)

用法:read(变量名)    如:read(n);

2.2 read_arr

功能:快读数组(int类型数字)

用法:read_arr(数组名,开始下标,结束下标)    如:read_arr(a,1,n);

2.3 print_arr

功能:输出数组(int类型数字)

用法:print_arr(数组名,开始下标,结束下标,间隔的字符串,结束输出的字符串)    如:print_arr(a,1,n,",","\n");

注意:请使用string字符串格式!

2.4 Clear

功能:清空数组(int类型数字)

用法:Clear(数组名,开始下标,结束下标)    如:Clear(a,1,n);

2.5 er_fen

功能:二分法单调不下降数组找数字(int类型数字),有返回下标,无返回 -1

用法:er_fen(数组名,开始下标,结束下标,要找的数)    如:er_fen(a,1,n,2);

2.6 pow

功能:快速幂(int类型数字)

用法:pow(底数,次数)   如:pow(2,4);

2.7 sushu

功能:判断素数(int类型数字)

用法:sushu(要判断的数)   如:sushu(4)

其余的略

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ACM 算法模板集 Contents 一. 常用函数与STL 二. 重要公式与定理 1. Fibonacci Number 2. Lucas Number 3. Catalan Number 4. Stirling Number(Second Kind) 5. Bell Number 6. Stirling's Approximation 7. Sum of Reciprocal Approximation 8. Young Tableau 9. 整数划分 10. 错排公式 11. 三角形内切圆半径公式 12. 三角形外接圆半径公式 13. 圆內接四边形面积公式 14. 基础数论公式 三. 大数模板,字符读入 四. 数论算法 1. Greatest Common Divisor最大公约数 2. Prime素数判断 3. Sieve Prime素数筛法 4. Module Inverse模逆元 5. Extended Euclid扩展欧几里德算法 6. Modular Linear Equation模线性方程(同余方程) 7. Chinese Remainder Theorem中国余数定理(互素于非互素) 8. Euler Function欧拉函数 9. Farey总数 9. Farey序列构造 10. Miller_Rabbin素数测试,Pollard_rho因式分解 五. 图论算法 1. 最小生成树(Kruscal算法) 2. 最小生成树(Prim算法) 3. 单源最短路径(Bellman-ford算法) 4. 单源最短路径(Dijkstra算法) 5. 全源最短路径(Folyd算法) 6. 拓扑排序 7. 网络预流和最大流 8. 网络最小费用最大流 9. 网络最大流(高度标号预流推进) 10. 最大团 11. 二分图最大匹配(匈牙利算法) 12. 带权二分图最优匹配(KM算法) 13. 强连通分量(Kosaraju算法) 14. 强连通分量(Gabow算法) 15. 无向图割边割点和双连通分量 16. 最小树形图O(N^3) 17. 最小树形图O(VE) 六. 几何算法 1. 几何模板 2. 球面上两点最短距离 3. 三点求圆心坐标 4. 三角形几个重要的点 七. 专题讨论 1. 树状数组 2. 字典树 3. 后缀树 4. 线段树 5. 并查集 6. 二叉堆 7. 逆序数(归并排序) 8. 树状DP 9. 欧拉路 10. 八数码 11. 高斯消元法 12. 字符串匹配(KMP算法) 13. 全排列,全组合 14. 二维线段树 15. 稳定婚姻匹配 16. 后缀数组 17. 左偏树 18. 标准RMQ-ST 19. 度限制最小生成树 20. 最优比率生成树(0/1分数规划) 21. 最小花费置换 22. 区间K大数 23. LCA - RMQ-ST 24. LCA – Tarjan 25. 指数型母函数 26. 指数型母函数(大数据) 27. 单词前缀树(字典树+KMP) 28. FFT(大数乘法) 29. 二分图网络最大流最小割 30. 混合图欧拉回路 31. 无源汇上下界网络流 32. 二分图最小点权覆盖 33. 带约束的轨道计数(Burnside引理) 34. 三分法求函数波峰 35. 单词计数,矩阵乘法 36. 字符串和数值hash 37. 滚动队列,前向星表示法 38. 最小点基,最小权点基
C++中,algorithm和numeric库中有几个常用模板函数可以用于刷题,包括swap,reverse,sort,unique和accumulate。 1. swap(): 这个函数可以交换两个变量的值。它的模板定义如下: ```cpp template <class T> void swap(T& a, T& b) { T c(a); a = b; b = c; } ``` 通过调用swap()函数,可以交换两个变量的值。 2. reverse(): 这个函数可以反转容器中元素的顺序。例如,可以使用reverse()函数反转一个vector容器中的元素。 3. sort(): 这个函数可以对容器中的元素进行排序。可以通过提供一个比较函数来指定排序的规则。比如,可以使用sort()函数对一个vector容器中的元素进行升序排序或者降序排序。 4. unique(): 这个函数可以去除容器中的重复元素,并返回指向新的逻辑尾部的迭代器。需要注意的是,在调用unique()函数之前,需要先对容器进行排序。 5. accumulate(): 这个函数可以对容器中的元素进行累加操作,并返回累加结果。accumulate()函数接受三个参数:容器的起始迭代器、容器的结束迭代器和一个初始值。可以使用accumulate()函数计算数组或者vector容器中元素的和。 以上是C++中一些常用算法函数,可以在刷题过程中使用它们来简化代码并提高效率。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [C++ LeetCode刷题常用函数](https://blog.csdn.net/qq_40876059/article/details/126245632)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值