算法竞赛常用的库函数

引言

这个竞赛中的一些库还是非常的好用,可以节省代码量和时间,而且在项目和工作面试中知道一些常用的算法还是比较有用的人家已经为我们实现好了,只要记住用起来还是不错的。


万能头文件

竞赛中用下面这个万能头文件还是比较不错的,只要编译器是gcc的就不会出错,省时省力。

#include <bits/stdc++.h> 

一、iostream

string to_string(int num);  //将数字转为字符串

二、algorithm

1.sort

排序算法

int a[20] = {
   1,2,3,4,5,6};
vector<int> b = {
   1,2,3,4,5,6};

sort(a, a+10);
sort(a+1, a+10+1);
sort(b.begin(), b.end());
sort(a, a+10, greater<int>()); //可传仿函数进去,默认按小于比较

2.next_permutation

全排列算法

vector<int> arr = {
   1,2,3,4,5};
do
{
   
}while(next_permutation(arr.begin(), arr.end());  //全排列,除过当前的排列顺序

2.unique

伪去重:把重复的元素放到容器末尾,返回末尾第一个重复元素的迭代器。

vector<int> arr = {
   1,1,2,3,4,4,4,4,5,6,7,8,9};
auto t = unique(arr.begin(), arr.end());  

arr.erase(unique(arr.begin(),arr.end()), arr.end());  //可以搭配erase真正意义上的的去重

三、string

1.substr

string str = "abcdef";
auto t = str.substr(0,5);  //返回从0号下标开始算起,总共5个字符组成的字符串

2.stoi

 //将str转为十进制数
int stoi(string& str,size_t* pos = 0, int base = 10); 
//base默认str为10进制,为0则自动检测(0、0x)
//pos默认为nullptr,否则传出来的是这个数的个数,eg:-12为3

四、cmath

1.log类

double log(double x);    //返回logex的值
double log10(double x);  //返回log10x的值
double log2(double x);   //x的二进制对数

2.取整

double ceil (double x);   //取上整,返回比x大的最小整数
double floor (double x);  //取下整,返回比x小的最大整数,即高斯函数[x]
double round(double x);    //返回x的四舍五入值

不用库函数实现:

cout << (int)a << endl;                      //向下取整

cout << (a > (int)a ? (int)a+1 : (int)a) << endl;  //向上取整

cout << (a+b-1) / b << endl;  // a/b上取整

cout << (int)(a+0.5) << endl;                //四舍五入

五、climits、cfloat

这个头文件里面主要就是宏常量

#include <iostream>
#include <climits>
#include <cfloat>

using namespace std;

int main() {
   
    cout << "int 最大值:" << INT_MAX << '\n';  //2e9  2.1*10^9
    cout << "int 最小值:" << INT_MIN << '\n';
    
    cout << "double 最大值:" << DBL_MAX << '\n';
    cout << "double 最小值:" << DBL_MIN << '\n';

    cout << "long long 最大值:" << LONG_LONG_MAX << '\n';  //9e18
    cout << "long long 最小值:" << LONG_LONG_MIN << '\n';
    cout << "unsigned long long 最大值:" << ULONG_LONG_MAX << '\n';
}


六、cctype

这个字母和数字都是按ASCLL码来定义的,数字即为字符。

bool isalnum(int c);  //是否为字母或数字
bool isalpha(int c);  //是否为字母
bool islower(int c);  //是否为小写字母
bool isupper(int c);  //是否为大写字母
bool isdigit(int c);  //是否为数字

int tolower(int c);  //转换为小写字母,其余字符不管
int toupper(int c);  //转换为大写字母

七、numeric

1.accmulate

求和算法

vector<int> arr(10, 2);
cout << accmulate(arr.begin(), arr.end(), 0) << endl;  //第三个参数代表从总和0开始算

相关推荐

  1. 算法竞赛常用函数

    2024-02-19 06:58:02       43 阅读
  2. numpy一些常用函数

    2024-02-19 06:58:02       50 阅读
  3. C语言中常用函数和头文件

    2024-02-19 06:58:02       53 阅读
  4. C++常用

    2024-02-19 06:58:02       42 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-19 06:58:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-19 06:58:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-02-19 06:58:02       82 阅读
  4. Python语言-面向对象

    2024-02-19 06:58:02       91 阅读

热门阅读

  1. 机器学习算法的最新进展

    2024-02-19 06:58:02       49 阅读
  2. cookie+session和token

    2024-02-19 06:58:02       55 阅读
  3. 计算机网络——网络安全

    2024-02-19 06:58:02       39 阅读
  4. 计算机网络——16概述和传输层服务

    2024-02-19 06:58:02       41 阅读
  5. 【ArcGIS Pro二次开发】(81):文本符号_CIMTextSymbol

    2024-02-19 06:58:02       45 阅读
  6. Qt使用单例模式读取xml文件

    2024-02-19 06:58:02       46 阅读
  7. Python Web开发:Django与Flask框架

    2024-02-19 06:58:02       51 阅读
  8. vue自定义view,传值和事件回调

    2024-02-19 06:58:02       48 阅读
  9. mongodb常用命令

    2024-02-19 06:58:02       46 阅读
  10. ACM/NOI/CSP比赛经验分享

    2024-02-19 06:58:02       47 阅读