这个竞赛中的一些库还是非常的好用,可以节省代码量和时间,而且在项目和工作面试中知道一些常用的算法还是比较有用的人家已经为我们实现好了,只要记住用起来还是不错的。
竞赛中用下面这个万能头文件还是比较不错的,只要编译器是gcc的就不会出错,省时省力。
#include
string to_string(int num); //将数字转为字符串
排序算法
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>()); //可传仿函数进去,默认按小于比较
全排列算法
vector<int> arr = {1,2,3,4,5};
do
{
}while(next_permutation(arr.begin(), arr.end()); //全排列,除过当前的排列顺序
伪去重:
把重复的元素放到容器末尾,返回末尾第一个重复元素的迭代器。
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 str = "abcdef";
auto t = str.substr(0,5); //返回从0号下标开始算起,总共5个字符组成的字符串
//将str转为十进制数
int stoi(string& str,size_t* pos = 0, int base = 10);
//base默认str为10进制,为0则自动检测(0、0x)
//pos默认为nullptr,否则传出来的是这个数的个数,eg:-12为3
double log(double x); //返回logex的值
double log10(double x); //返回log10x的值
double log2(double x); //x的二进制对数
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; //四舍五入
这个头文件里面主要就是宏常量
#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';
}
这个字母和数字都是按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); //转换为大写字母
求和算法
vector<int> arr(10, 2);
cout << accmulate(arr.begin(), arr.end(), 0) << endl; //第三个参数代表从总和0开始算