算法竞赛常用的库函数

目录

  • 引言
  • 万能头文件
  • 一、iostream
  • 二、algorithm
    • 1.sort
    • 2.next_permutation
    • 2.unique
  • 三、string
    • 1.substr
    • 2.stoi
  • 四、cmath
    • 1.log类
    • 2.取整
  • 五、climits、cfloat
  • 六、cctype
  • 七、numeric
    • 1.accmulate

引言

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


万能头文件

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

#include  

一、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 
#include 
#include 

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开始算

你可能感兴趣的:(算法,算法)