C++ 算法竞赛的常用库函数

目录

引言: 

常用库函数部分

1. STL容器:

vector、deque、list、set、map、unordered_set、unordered_map等。

2. STL算法:

3. 数学函数:

4. 字符串函数(char型、string类、二者间的相互转换):

5. 输入输出函数:

6. 其他函数:

常用头文件、数据结构部分

1. iostream:

2. vector:

3. string:

4. queue:

5. stack:

6. set:

7. algorithm:

一、下面开始对引言提及到的关键词逐个进行简单解释:

(文章第二部分再对每个关键词进行对每个关键词的用法的说明)

1. STL容器:

- vector:

- deque:

- list:

- set:

- map:

- unordered_set:

- unordered_map:

2. STL算法: 

- sort:

- lower_bound:

- upper_bound:

- binary_search:

- next_permutation:

- prev_permutation:

3. 数学函数: 

- abs:

- ceil:

- floor:

- sqrt:

- pow:

- log:

- exp:

- sin:

- cos:

- tan:

4. 字符串函数: 

char类型:

string类型:

6. 其他函数: 

 二、下面开始对引言提到的关键词逐个进行简单的用法解释

(编译器使用devc++ 5.11)

下面先来介绍一下简单的数据结构和一些头文件:

 iostream: 基本的输入、输出

 vector:动态数组 可以在运行时添加或删除元素​编辑

 queue:队列​编辑

 stack:栈​编辑

 set:集合 可以存储不重复的元素,并且可以进行集合的交、并、差等操作。​编辑

 map :映射(下角标可以为字符串、负数… 的数组)​编辑

algorithm:  里包含了许多常用的算法。(…带持续更新)


引言: 

以下是一些常用的C++库函数,当参加C++算法竞赛时,熟练掌握这些库函数可以帮助你更快地解决问题。

常用库函数部分

1. STL容器:vectordequelistsetmapunordered_setunordered_map等。

2. STL算法:sortlower_boundupper_boundbinary_searchnext_permutationprev_permutation等。

3. 数学函数:absceilfloorsqrtpowlogexpsincostan等。

4. 字符串函数(char型、string类、二者间的相互转换):

(char)

strlen、strcmpstrcpystrcatstrstrisdigit、isalpha 等。

(string): .size()、.empty()、.clear()、.append()、.insert()、.erase()、.replace()、.substr()、.find()、rfind()、.compare()、.c_str()、.stoi()、.stod()、.to_string() 等 。

5. 其他函数:

memsetmemcpyrandtimeassert、atoi、to_string()等。  

常用头文件、数据结构部分

1. iostream

用于输入和输出,包括cincout

2. vector

用于创建动态数组,可以在运行时添加或删除元素。

3. string

用于处理字符串,包括字符串的拼接、查找、替换等。

4. queue

用于创建队列,可以在队列的末尾添加元素,在队列的开头删除元素。

5. stack

用于创建栈,可以在栈的顶部添加元素,在栈的顶部删除元素。

6. set:

用于创建集合,可以存储不重复的元素,并且可以进行集合的交、并、差等操作。

7. algorithm:

包含了许多常用的算法,例如排序、查找、计数等。(…待更,持续更新)

//目前本文已涉及algorithm:
1、reverse(str.begin(),str.end())  逆置容器、数组
2、find(a,a+n,88)    查找数组中某个数据
3、upper_bound(a,a+n,3)   查找第一个大于3的数
4、lower_bound(a,a+n,7)   查找第一个小于7的数
5、fill(a,a+n,'0')
6、count(a,a+n,'0')
7、__gcd(a,b)
8、set_interesction()
9、set_union()
10、set_difference()
11、next_permutation
12、transform(str.begin(),str.end(),str.begin(),::toupper/::tolower)
13、nth_element(a,a+k,a+n)。

一、下面开始对引言提及到的关键词逐个进行简单解释:

(文章第二部分再对每个关键词进行对每个关键词的用法的说明)

1. STL容器:

- vector

动态数组,使用push_back()添加元素,使用[]at()访问元素,使用size()获取元素个数。

- deque

双端队列,使用push_back()push_front()添加元素,使用[]at()访问元素,使用size()获取元素个数。

- list

双向链表,使用push_back()push_front()添加元素,使用begin()end()访问元素,使用size()获取元素个数。

- set

红黑树,使用insert()添加元素,使用find()查找元素,使用size()获取元素个数。

- map

红黑树,使用insert()添加元素,使用find()查找元素,使用size()获取元素个数,使用[]访问元素。

- unordered_set

哈希表,使用insert()添加元素,使用find()查找元素,使用size()获取元素个数。

- unordered_map

哈希表,使用insert()添加元素,使用find()查找元素,使用size()获取元素个数,使用[]访问元素。

2. STL算法: 

- sort

排序,使用sort(begin, end)对区间进行排序。

- lower_bound

二分查找,使用lower_bound(begin, end, value)查找第一个小于等于value的元素。

- upper_bound

二分查找,使用upper_bound(begin, end, value)查找第一个大于value的元素。

- binary_search

二分查找,使用binary_search(begin, end, value)查找是否存在value

- next_permutation

全排列,使用next_permutation(begin, end)获取下一个排列。

- prev_permutation

全排列,使用prev_permutation(begin, end)获取上一个排列。3.

3. 数学函数: 

- abs

绝对值,使用abs(value)获取value的绝对值。

- ceil

向上取整,使用ceil(value)获取大于等于value的最小整数。

- floor

向下取整,使用floor(value)获取小于等于value的最大整数。

- sqrt

平方根,使用sqrt(value)获取value的平方根。

- pow

幂函数,使用pow(base, exponent)获取baseexponent次幂。

- log

对数函数,使用log(value)获取以e为底的value的对数。

- exp

指数函数,使用exp(value)获取evalue次幂。

- sin

正弦函数,使用sin(value)获取value的正弦值。

- cos

余弦函数,使用cos(value)获取value的余弦值。

- tan

正切函数,使用tan(value)获取value的正切值。

4. 字符串函数: 

char类型:

- strlen:字符串长度,使用strlen(str)获取str的长度。

- strcmp:字符串比较,使用strcmp(str1, str2)比较str1str2的大小。

- strcpy:字符串复制,使用strcpy(dest, src)src复制到dest中。

- strcat:字符串拼接,使用strcat(dest, src)src拼接到dest的末尾。

- strstr:子串查找,使用strstr(str, substr)查找substrstr中的位置。

- isdigit:判断是否为数字,使用isdigit(ch)判断ch是否为数字。

- isalpha:判断是否为字母,使用isalpha(ch)判断ch是否为字母。

string类型:

1. size():返回字符串的长度,

例如:string str = "Hello World"; int len = str.size(); // len = 11

2. empty():判断字符串是否为空,

例如:string str = ""; bool isEmpty = str.empty(); // isEmpty = true

3. clear():清空字符串,

例如:string str = "Hello World"; str.clear(); // str = ""

4. append():在字符串末尾添加字符或字符串,

例如:string str = "Hello"; str.append(" World"); // str = "Hello World"

5. insert():在指定位置插入字符或字符串,

例如:string str = "Hello"; str.insert(2, "llo W"); // str = "Hello World"

6. erase():删除指定位置的字符或一段字符,

例如:string str = "Hello World"; str.erase(5, 6); // str = "Hello"

7. replace():替换指定位置的字符或一段字符,

例如:string str = "Hello World"; str.replace(6, 5, "C++"); // str = "Hello C++"

8. substr():截取子字符串,

例如:string str = "Hello World"; string subStr = str.substr(6, 5); // subStr = "World"

9. find():查找子字符串的位置,

例如:string str = "Hello World"; int pos = str.find("World"); // pos = 6

10. rfind():从后往前查找子字符串的位置,

例如:string str = "Hello World"; int pos = str.rfind("o"); // pos = 7

11. compare():比较两个字符串,

例如:string str1 = "Hello"; string str2 = "World"; int result = str1.compare(str2); // result < 0

12. c_str():将字符串转换为C风格字符串,

例如:string str = "Hello World"; const char* cStr = str.c_str();

13. stoi():将字符串转换为整数,

例如:string str = "123"; int num = stoi(str); // num = 123

14. stod():将字符串转换为双精度浮点数,

例如:string str = "3.14"; double num = stod(str); // num = 3.14

15. to_string():将数字转换为字符串,

例如:int num = 123; string str = to_string(num); // str = "123"

16. str.erase(unique(alls.begin(),alls.end()),str.end());  //去重

string、char的相互转换

char*转string

    string s;
	char *p = "hello";  //直接赋值即可
	s = p;

string转char*

    string str="world";
	const char *p = str.c_str();  //要加const并且等号右边用char*
	cout<<p;

string转char[]:循环遍历string [i] 并赋值给char [i]  

6. 其他函数: 

- memset:内存清零,使用memset(ptr, value, size)ptr指向的内存块的前size个字节设置为value

- memcpy:内存复制,使用memcpy(dest, src, size)src指向的内存块的前size个字节复制到dest指向的内存块中。

- rand:随机数生成,使用rand()生成一个随机数。

- time:获取当前时间,使用time(NULL)获取当前时间的秒数。

- assert:断言,使用assert(expression)判断expression是否为真,若为假则输出错误信息并终止程序。

string转int、long long、double


//atoi、atol、atof同理

#include<iostream>
#include<stdlib.h>
using namespace std;
int main()
{    
    string str("1234");
	int num=atoi(str.c_str());
	cout<<num;  //输出int型的 1234 
}

int转string

#include<iostream>
#include<string>
using namespace std;
int main(){
	int num=12345;
	string str;
	str=to_string(num);
	cout<<str; 
}

 二、下面开始对引言提到的关键词逐个进行简单的用法解释

(编译器使用devc++ 5.11)

下面先来介绍一下简单的数据结构和一些头文件:

 iostream: 基本的输入、输出

 vector:动态数组 可以在运行时添加或删除元素

 queue:队列

 stack:栈

 set:集合 可以存储不重复的元素,并且可以进行集合的交、并、差等操作。

 map :映射(下角标可以为字符串、负数… 的数组)

algorithm:  里包含了许多常用的算法。(…带持续更新)

  • 17
    点赞
  • 132
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
### 回答1: ACM C常用库函数是指用于算法竞赛中常见算法实现的C语言标准库函数。这些函数可以帮助竞赛选手减少重复造轮子的时间,提高代码的效率和可读性。以下是一些常见的ACM C常用库函数: 1. qsort()函数:快速排序函数,用于对数组进行排序。 2. bsearch()函数:二分查找函数,用于在有序数组中查找元素。 3. memset()函数:用于对变量的内存空间进行赋值。 4. memcpy()函数:用于将一个内存中的数组复制到另一个内存空间。 5. sprintf()函数:用于将格式化的输出写入一个字符串中。 6. fscanf()和fprintf()函数:用于文件的输入输出。 7. stdio.h中的printf()和scanf()函数:C语言中最常用的标准输入输出函数。 8. math.h中的数学函数:如sin,cos,tan,exp,log等。 以上这些函数都是ACM C常用库函数中非常重要的一部分,掌握好它们对算法竞赛有很大的帮助。由于算法竞赛时间十分紧张,所以熟悉这些函数可以帮助选手快速完成算法实现,提高算法竞赛的效率和成功率。 ### 回答2: ACM (Association for Computing Machinery) C语言常用库函数是指在解决ACM竞赛中各种算法问题时,常常使用的C语言函数库。以下是一些常用库函数: 1. 数学函数库(math.h):可以进行数学计算,包括求平方根、三角函数、对数函数、指数函数等。例如,fabs()用于求绝对值,sqrt()用于求平方根,sin()用于求正弦值等。 2. 字符串函数库(string.h):可以操作字符串,包括拷贝、比较、查找等操作。例如,strcpy()用于字符串拷贝,strcmp()用于字符串比较,strcat()用于字符串拼接等。 3. 标准输入输出函数库(stdio.h):可以进行文件操作、标准输入输出等操作。例如,printf()用于输出格式化字符串,scanf()用于标准输入等。 4. 内存操作函数库(stdlib.h):可以进行动态内存分配、随机数生成等操作。例如,malloc()用于动态内存分配,free()用于释放分配的内存,rand()用于随机数生成等。 5. 时间与日期函数库(time.h):可以获取系统时间,处理时间与日期等操作。例如,time()用于获取系统时间,ctime()用于将时间转换成字符串等。 以上是ACM C语言常用库函数的一部分,ACM竞赛中常常使用这些函数库来辅助解决各种算法问题。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白学编程!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值