【C++基础】算法题中那些常用的头文件
2020-07-27 19:01
218 查看
这里是我整理的一些算法题中常用的一些头文件以及它其中经常被用到的函数,持续更新!
cstdio/stdio.h
头文件cstdio/stdio.h是C/C++使用最频繁的文件,因为文件中包含很多常用的方法,如下所示:
<1> 格式化输入(scanf)/输出(printf)
scanf,
printf,是最常用的两个函数,在算法题中,一般用以格式化和大规模输入输出,输出和输入效率高于
cin和
cout
<2> 文件操作
fopen/fclose
打开和关闭文件
#include <stdio.h> int main () { FILE * pFile; pFile = fopen ("myfile.txt","w"); if (pFile!=NULL) { fputs ("fopen example",pFile); fclose (pFile); } return 0;
remove
删除文件rename
重命名
#include <stdio.h> using namespace std; int main() { //重命名 const char oldname[] = "1.txt"; const char newname[] = "myfile.txt"; rename(oldname,newname); //删除文件 remove( "myfile.txt" ) return 0; }
<3> getchar
、putchar
、gets
、puts
getchar(): 读一个字符
putchar('c'):从标准输入设备输入字符c
gets():从标准输入设备读字符串,其可以无限读取,不会判断上限,以换行符结束读取
puts("a string"):输入一个字符串,可以换行,所以可以用
puts("")换行。
iostream
C++ 流式操作头文件,算法题用的最多的头文件之一
<1> cin / cout
C++中新增的输入和输出函数。
cin/cout和
printf/scanf的使用场景对比:
cin和cout 常常使用在输入/输入规模不大的场景,而printf和scanf常常使用在输入和输入规模大的场景,因为printf 和scanf 的效率要高于cin和cout ,但cin 和cout 使用更为方便,小规模基本上没有效率的问题。
值得一提的是:
如果你的编译器支持C++11标准及更高标准,
iostream头文件包含了
cstdio,也就是说仅仅
#include<iostream>就可以使用
cstdio的内容
cstring
该函数的头文件之下包含有很多实用的字符串函数,下面只介绍它们之中最常被使用的一部分。
<1>拷贝相关函数
memcpy
void* memcpy(void* destination,const void* source, size_t num)
从source指向的地址拷贝num bytes到destination指向的地址。不检查source中的空字符,总是拷贝num bytes,可能产生溢出,当destination和source的大小小于num时。
int a[] = {1,2,3,4,5,6}; int b[10]; //把a拷贝给b memcpy(b,a, sizeof a);
strcpy
char * strcpy ( char * destination, const char * source )
将source指向的字符串拷贝到destination指向的地方。会检查空字符,遇空字符停止(字符串结束标志)。可能存在溢出。
char a[] = "a string"; char b[30]; strcpy(b,a); puts(b)//输出 a string
strncpy
char * strncpy ( char * destination, const char * source, size_t num )
将source指向的字符串拷贝到destination指向的地方,最多拷贝num bytes,或者遇到空字符(字符串结束标志)停止。num可以防止溢出。
char a[] = "string"; char b[20]; strncpy(b,a,sizeof(char[4])); puts(b);//输出:stri
<2> 连接相关函数
strcat
char * strcat ( char * destination, const char * source )
将source指向的字符串连接到destination指向的字符串的后面。当连接后的大小大于destination的大小时可能存在溢出。
char a[] = "astring"; char b[] = "bstring"; strcat(a,b); puts(a);//astringbstring
strncat
char * strncat ( char * destination, const char * source, size_t num )
将source指向的字符串连接到destination指向的字符串的后面。最多连接num bytes。
char a[] = "astring"; char b[] = "bstring"; strncat(a,b,sizeof(char[4])); puts(a);//astringbstr
<3>比较相关函数
memcmp
int memcmp ( const void * ptr1, const void * ptr2, size_t num )
比较ptr1、ptr2指向的内存块的前面num bytes,如果都相同则返回
0,如果第一个不同byte ptr1的小于ptr2的,
返回负数,否则
返回正数。如果前面都相同,即使中间遇到空字符,也会继续比较下去,直到比较完所有的num bytes。
char a[] = "this is a string"; char b[] = "this is b string"; int arr1[] = {1,2,3,4,5}; int arr2[] = {1,2,4,3,5}; int arr3[] = {1,2,2,4,5}; //比较串a和串b 前9位和前7位 int isEqual = memcmp(a,b,sizeof(char[7])); // isEqual = 0 isEqual = memcmp(a,b,sizeof(char[9])); // isEqual = -1 //比较arr1和arr2前2位 isEqual = memcmp(arr1,arr2,sizeof(int[2])); //isEqual = 0 //整体比较 isEqual = memcmp(arr1,arr2, sizeof arr1 >= sizeof arr2 ? sizeof arr1 : sizeof arr2); // isEqual = -1 //整体比较arr1和arr3 isEqual = memcmp(arr1,arr3, sizeof arr1 >= sizeof arr3 ? sizeof arr1 : sizeof arr3); // isEqual = 1
strcmp
int strcmp ( const char * str1, const char * str2 );
比较str1、str2指向的字符串,直到遇到不相同的字符或者空字符结束。如果都相同则返回
0,如果第一个不同byte ptr1的小于ptr2的,返回
负数,否则返回
正数。
char a[] = “this is a string”;
char b[] = "this is b string"; char c[] = "this is 1 string"; char d[] = "this is a string"; //比较字符串a b int isEqual = strcmp(a,b); cout << isEqual << endl; // -1 //比较字符串a c isEqual = strcmp(a,c); cout << isEqual << endl; // 1 //比较字符串a d isEqual = strcmp(a,d); cout << isEqual << endl;// 0
strncmp
int strncmp ( const char * str1, const char * str2, size_t num )
比较ptr1、ptr2指向的字符串,直到遇到不相同的字符或者空字符结束或者比较完前面的num bytes结束。如果都相同则返回
0,如果第一个不同byte ptr1的小于ptr2的,返回
负数,否则返回
正数。
//效果和memcmp差不多,只是这个只能比较字符串
<4>检索相关函数:
memchr
const void * memchr ( const void * ptr, int value, size_t num );
void * memchr ( void * ptr, int value, size_t num );
在ptr指向的内存中的前num bytes中搜索值value,返回第一个value的指针,如果没有找到返回空指针。
char a[] = "this is a string"; void* aptr = memchr(a,'a',sizeof a); // aptr = 0x6afed3 aptr = memchr(a,'c',sizeof a); //aptr = 0;
strchr
const char * strchr ( const char * str, int character );
char * strchr ( char * str, int character );
在ptr指向的字符串中搜索值value,返回第一个value的指针,如果没有找到返回空指针。
char a[] = "this is a string"; void* aptr = strchr(a,'a'); // aptr = 0x6afed3 aptr = strchr(a,'c'); //aptr = 0;
<5> 其他函数
memset
void * memset ( void * ptr, int value, size_t num );
设置ptr指向的内存的前面num bytes的值为value
strlen
size_t strlen ( const char * str );
返回str指向字符串的长度,不包含空字符
cmath
<1>. 绝对值
整数绝对值 abs
int abs( int num );
函数返回参数num.的绝对值
长整形绝对值 labs
long labs( long num );
函数返回参数num的绝对值。
浮点数绝对值 fabs
double fabs( double arg );
函数返回参数arg的绝对值。
<2> 三角函数
直接调用对应的方法即可: 注意x 为弧度值 ,π 用 M_PI 宏表示
三角函数
double sin (double x);
double cos (double x);
double tan (double x);
反三角函数
double asin (double x);结果介于[-PI/2,PI/2]
double acos (double x);结果介于[0,PI]
double atan (double x);反正切(主值), 结果介于[-PI/2,PI/2]
double atan2 (double, double);反正切(整圆值),结果介于[-PI/2, PI/2]
<3> 指数函数
平方根 sqrt
double sqrt( double num );
函数返回参数num的平方根。如果num为负,产生域错误。
e的幂 exp
double exp( double arg );
函数返回 e (2.7182818) 的arg次幂。
3. 幂 pow
double pow( double base, double exp );
函数返回以参数base 为底的exp 次幂。如果base为零或负和exp 小于等于零或非整数时,产生域错误。如果溢出,产生范围错误
<4>对数函数
double log (double);自然对数
double log10( double num );以10为底的对数
//若要算以 a 为底的对数:
sum=log(x)/log(a);(换底公式)
<5>其他常用函数
double modf( double num, double *i );
函数将参数num 分割为整数和小数,返回小数部分并将整数部分赋给i。
float floor( float arg );
double floor( double arg );
long double floor( long double arg );
double floor( Integral arg ); (C++11)
功能:返回一个小于传入参数的最大整数(向下取整)
相关文章推荐
- C++和Matlab最常用的编程技能,实现复杂算法的基础
- c++基础8:常用的数据结构及算法
- STL之常用算法(C++)持续更新
- C/C++笔试题-主要考察C/C++语言基础概念、算法及编程
- C++基础算法学习——N皇后问题
- C++基础(一)头文件
- 图像处理之基础---卷积及其快速算法的C++实现
- 面试的时候最常用的两个基础算法
- C++ 基础 命名空间 类头文件 类的实现写法
- Python常用算法学习基础教程
- C++之字符串的zipzag排列(9)---《那些奇怪的算法》
- 算法岗位面试笔记2:C++基础-面向对象程序设计
- C++之归并排序(7)---《那些奇怪的算法》
- 十大基础应用算法及C++实现(一)----快速排序算法
- C++基础算法学习——猜假币
- c++基础知识,有现成的函数不用,非的自己设计算法,这不是坑爹吗?
- [C++STDlib基础]关于日期时间的操作——C++标准库头文件<ctime>
- C/C++ 常用算法手册 第二章 数据结构
- 每天学一点c++:c++常用的头文件介绍
- [C++STDlib基础]关于数学函数的介绍——C++标准库头文件<cmath>