C++程序设计常用库函数.doc_第1页
C++程序设计常用库函数.doc_第2页
C++程序设计常用库函数.doc_第3页
C++程序设计常用库函数.doc_第4页
C++程序设计常用库函数.doc_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C+程序设计 常用库函数本文主要涉及两类库函数,运行期库(run-time library)和C+标准库。下面简单介绍这些库的使用要点。运行期库是用C语言实现的基础程序库,其它库都以此为基础。MSDN将运行期库按功能划分,如表B-1所示。来自MSDN Library Visual Studio 6.0Visual C+ DocumentationUsing Visual C+Visual C+ Programmerss GuideRun-Time Library ReferenceRun-Time Routines by Category表B-1运行期库分类功能相关头文件(不完全)可变参数用于定义可变参数的函数缓冲区管理按字节管理内存缓冲区按字节分类多字节字符分类,与当前多字节代码页相关按字符分类对单字节字符、宽字符、多字节字符进行分类。比较常用,如isalpha, isprint。数据转换一种数据转换到另一种,例如字符串到int或double,或反之。有很多转换既有函数实现,也有宏实现,可选择。调试程序debug调试,函数库中有专门的调试版本,支持单步执行、断言、错误检测、异常,跟踪堆空间分配,避免内存泄露,以及调试信息报告等。目录控制读取或改变目录,创建、删除目录等,也包括使用环境路径来搜索文件错误处理包括断言、检测IO错误、清除错误标记、判断低级IO的文件尾eof等。异常处理程序程序终止处理(terminate)、意外处理(unexpected)文件处理对磁盘文件的建立、删除、改名、文件访问许可等操作。浮点数支持专门针对浮点数的计算,如指数、对数、三角函数、双曲函数等,也包括错误检测,如溢出。 输入输出从文件或设备中读入数据或写出数据。文件IO要区分文本模式和二进制模式。IO分为以下三类:1、流式IO,将数据作为字符或字节序列,有缓冲。2、低级IO,直接调用操作系统,无缓冲。3、控制台与端口IO,对键盘和字符显示器的直接读写,对IO设备,如打印机、串行口的直接读写。国际化适应不同语言,与地域locale相关程序、宽字符、多字节字符、通用文本等等。 内存分配动态分配、回收内存,如malloc、free等函数。 进程控制与环境控制进程的启动、停止与管理,也包括线程的启停。操作系统环境信息的读取与改变。 排序与查找对任意类型数组进行排序,折半查找与线性查找。 字符串管理对以NULL结尾的各种字符串进行操作系统调用用来查找文件的3个函数时间管理获取当前系统日期时间、转换、调整等操作注1 MSDN按以上19类功能对运行期库分组。注2 同一个函数可能出现在不同功能分组中,也可能出现在不同的头文件中。注3 运行期库是纯C语言实现,不包含C+的内容(没有重载、形参缺省值、引用、模板等)。表B-2 运行期库头文件头文件名功能C+包装头文件名断言设置字符分类由库函数执行,检测错误代码浮点数计算ISO 646字符集处理检测整数类型的性质不同地域文字适应性公共数学计算执行非本地goto语句控制各种异常条件可变参数的函数多种有用的类型(typedef)和宏的定义输入和输出多种操作函数多种字符串的处理系统时间处理宽字符流,以及特殊字符串处理宽字符分类注1,表中列出的18个头文件是作为C+标准库,而运行期库的头文件还有许多未列入。注2,C+标准库的头文件大多不含.h后缀。注3,左边头文件内容被包装到C+标准的命名空间std中。例如,文件大致如下:namespace std #include ;表B-3 标准C+库头文件头文件名功能算法,提供了70多个模板函数,通过迭代器作用于各种容器,实现排序、查找、集合运算等算法。位集,一个模板类和两个支持模板函数。复数,一个模板类和若干模板函数双端队列容器,1个模板类和3个支持模板定义异常基类exception,若干模板函数,类似中的定义支持磁盘文件的iostream操作提供模板类以构建函数对象,类似于函数指针,供各种容器和算法使用定义带参格式控制符,用于控制输出格式定义了basic_ios类,作为iostream的基类定义了对几种模板类的正向引用,供iostream使用定义了几个对象,对标准流进行读写,如cin,cout,cerr,clog等。对ISO646字符集的处理输入流,定义了模板类basic_istream和basic_iostream迭代器,用于访问容器中的元素,也用于调用各种算法。定义了模板类numeric_limits,其中规范了算术计算中各种类型的值范围列表,基于双向链表的一种容器。提供一组模板类和函数,封装和管理地域locale信息,以支持多国文字习惯用法。映射容器,提供了一个映射map和一个多射multimap。一个类,一个运算符和若干函数用于请求分配与回收对象提供若干模板函数,用于数值计算,如求和、求乘积、求部分和等。输出流,定义了basic_osrteam,还有格式控制符队列容器,包含一个队列和一个优先级队列。集合容器,包含一个集合set和一个多集multiset。支持对数组对象的iostream操作,支持与basic_string的转换堆栈容器,stack模板类标准异常类型,以exception为基类,定义了一组派生类来描述各种异常类型。定义了basic_streambuf模板类,作为一组iostream类的基础定义了basic_string模板类,一种容器,其中用typedef定义了string类型。支持对字符数组对象的iostream操作,支持与C字符串的转换定义了对偶pair,作为映射和多射的基本元素定义了valarray模板类,支持可变长的数组向量容器,1个模板类和3个支持模板注1,表中列出了32个头文件,加上前面18个包装头文件,共50个头文件,组成C+标准库。注2,还有几个头文件未列入文档,、,它们没有被完整实现。注3,上表中包含了10个新版本的IO流头文件,而老版本只有8个头文件,对应关系如下表。表B-4 IO流的新旧头文件对比旧版本IO流头文件新版本IO流头文件注1,同一行上的两个头文件具有大致相同的功能,但内部具体类型有差别。注2,新老版本不能用在同一个项目中,因为它们使用不同的库文件(lib文件和dll文件)。下面是一些常用的运行期库。表B-5 数学函数函数原型功 能 返回值说 明int abs(int x)long labs(long x)double fabs(double x)求绝对值绝对值double pow(double x, double y)求x的y次方计算结果double sqrt(double x)求x的平方根计算结果double fmod(double x, double y)求x除以y的余数余数使x=i*y+f,f是返回值,i是整数,且f与x相同符号double ceil(double x)大于等于x的最小整数如ceil(2.8) =3double floor(double x)小于等于x的最大整数如floor(2.8)=2double modf(double x, double *y)取x的整数部分送到y所指向的单元中x的小数部分将浮点数x分解为整数部分和小数部分,如-2.3分解为-2和-0.3double exp(double x)e的x次方double log(double x)自然对数ln(x),以e为底的对数x0double log10(double x)以10为底的对数x0三角函数double sin(double x)double sinh(double x)正弦sin(x)双曲正弦sinh(x)计算结果x为弧度值double cos(double x)double cosh(double x)余弦cos(x)双曲余弦cosh(x)计算结果x为弧度值double tan(double x)double tanh(double x)正切tan(x)双曲正切计算结果x为弧度值double asin(double x)反正弦arcsin(x)-1x1double acos(double x)反余弦arccos(x)计算结果-1x1double atan(double x)反正切arctan(x)计算结果表B-6 C标准库函数原型功 能 返回值说 明void srand(unsigned int seed)设置伪随机数序列的起点,即随机数生成种子先设置种子,再调用rand生成随机数int rand(void)生成一个伪随机整数随机正整数,0void abort(void)终止进程,而没有刷新缓冲区,也没有执行清理不到万不得已,不要调用void exit(int status)先执行清理,刷新缓冲区,关闭打开的文件,最后终止进程返回0表示正常,其它值表示错误。返回值可被操作系统的批处理命令获得。int system(const char *command)执行command串的操作系统命令返回值就是指定命令执行所返回的值,0表示正常启动命令后等待返回。void qsort( void *base, size_t num, size_t width, int (_cdecl *compare )(const void *elem1, const void *elem2 ) );对任意类型的数组进行快速排序(冒泡排序的改进)。base是数组名,num是元素个数,width是元素的字节大小,最后形参是比较函数指针比较函数返回0,表示两元素相等。升序排序要求:返回值小于0,表示elem1小于elem2;返回大于0,表示elem1大于elem2。降序相反。void *bsearch(const void *key, const void *base, size_t num, size_t width, int ( _cdecl *compare ) ( const void *elem1, const void *elem2 ) );折半查找,base数组元素要按升序排序,元素个数为num,元素大小为width字节,查找key,最后一个形参是比较函数的指针。如果未找到,就返回NULL。如果找到就返回指针指向数组中的key如果数组未按升序排序,或者元素有重复,那么结果可不可预测。比较函数与qsort要求相同。动态内存管理void *malloc(size_t size );动态请求分配size字节的内存,但可能得到更大空间,因为内存分块管理。如果内存不够,就返回NULL。否则返回指针指向所分配的内存用free函数来回收内存。C基础函数,许多其它函数要调用该函数。void *calloc(size_t num, size_t size );动态请求分配一个数组,而且初始化为0。num个元素,每个元素大小为size个字节同上void *realloc(void *memblock, size_t size );对已分配的空间重新分配,可改变大小。如果第一个形参为NULL,就等同于malloc函数同上void free(void *memblock );动态回收所分配的内存,实参指针一定是用malloc、calloc或realloc得到的如果实参指针错误,可能导致不可预料的错误数据转换int tolower(int c);将字符c转换为小写,如果可能的话小写字符int toupper(int c);将字符c转换为大写,如果可能的话大写字符int atoi(const char * string)字符串转换为整数整数double atof(const char * string)字符串转换为doubledouble值double strtod(const char *string, char *endptr );字符串转换到double,而且得到停止指针double值第2个形参得到字符串中停止扫描的字符指针。strtol函数处理longstrtoul处理unsigned longchar *_itoa(int value, char *string, int radix);将int型value按基数redix转换到字符串string返回结果串基数范围2-36。_ltoa函数针对long型。_ultoa针对unsigned long型char *_gcvt(double value, int digits, char *buffer);将double型value转换到字符缓冲区buffer中返回结果串第2个形参确定有效位数char *_ecvt(double value, int count, int *dec, int *sign);将double型value转换到字符串,第2个形参确定总的有效位数返回结果串,串中无小数点第3个形参得到小数点位置(0和负值表示小数点在数字左边),第4个形参得到符号位(0为正,1为负)char *_fcvt(double value, int count, int *dec, int *sign);将double型value转换到字符串,第2个形参确定小数点后的有效位数返回结果串,串中无小数点第3个形参得到小数点位置(0和负值表示小数点在数字左边),第4个形参得到符号位(0为正,1为负)表B-7 字符串函数size_t是用typedef定义的unsigned int的同义词。NULL是值为0的宏,每个串char*都以NULL结尾。形参中所有const修饰的串都不可改变,反之,无const修饰的串都可改变,而且作为结果。注意,用NULL作为实参调用下面函数将导致运行错误。函数原型功 能返回值说 明int strlen(const char *string)求字符串的长度字符串包含的字符个数char * strcpy(char *s1, const char *s2)将s2串拷贝到s1中目的存储区的始址s1char *strncpy(char *p1, const char *p2, size_t count );将s2串拷贝到p1中,只拷贝count个字符同上int strcmp(const char *s1, const char *s2)比较两个字符串s1和s2如两串相同,就返回0。s1串小于s2串,返回负数,否则返回正数从前向后逐个字符比较int strncmp(const char *s1, const char *s2, size_t count );比较两个字符串s1和s2,只比较前count个字符同上int _stricmp(const char *s1, const char *s2);比较两个字符串s1和s2,而且忽略大小写同上int _strnicmp(const char *s1, const char *s2, size_t count );比较两个字符串s1和s2,只比较前count个字符,而且忽略大小写同上char * strcat(char *s1, const char * s2)将s2串拼接到s1串的后面目的存储区的始址s1char *strncat(char *s1, const char *s2, size_t count );将s2串拼接到s1串的后面,只拼接前count个字符同上char *_strrev( char *string );转换为逆向串返回结果串char *_strlwr( char *string);转换为小写串返回结果串char *_strupr( char *string );转换为大写串返回结果串char *strchr(const char *s, int c);在s串中查找字符c的首次出现位置如找到,返回指针指向该字符位置。如未找到,返回NULLchar *strrchr(const char *s, int c );在s串中查找字符c的最后出现位置如找到,返回指针指向该字符位置。如未找到,返回NULLchar * strstr(const char *s1, const char *s2)查找子串,在s1串中从前向后查找s2串首次出现位置如找到,就返回s1中s2出现的位置,否则就返回NULLs2作为一个串char *strpbrk(const char *s1, const char *s2);在s1串中从前向后查找s2中某个字符出现的位置如找到,返回s1中的位置。如果s1和s2没有共同字符,返回NULLs2作为一个字符集,而不是串。如,s1= xyzabgs2=abc返回abgsize_t strspn(const char *s1, const char *s2);在s1串中从前向后计数s2中字符的个数。即求s1串中前面有多少个字符在s2范围中。返回整数表示在s1串中第一个不在s2中的字符的位置。如果s1串的第1个字符不在s2中,就返回0。s2作为一个字符集,而不是串。如,s1= cabbages2=abc返回5size_t strcspn(const char *s1, const char *s2);在s1串中从前向后计数不在s2中字符的个数。即求s1串中前面有多少个字符都不在s2范围中。返回整数表示在s1串中第一个在s2中的字符的位置。如果s1串第1个字符在s2中,就返回0。s2作为一个字符集,而不是串。如,s1= xyzabcs2=abc返回3char *strtok(char *s1, const char *s2);在s1串中查找s2中的分割符,并用NULL替代分隔符,使s1分割为多个子串标记token返回第一个分隔符所分割的token串。下面调用用NULL作为s1的实参,可获取后面的字串标记s2作为一个分隔字符集,而不是串。缓冲区管理(按字节处理)void * memcpy(void *s1, const void *s2, size_t count)将s2所指的共count个字节拷贝到s1所指存储区中目的存储区的始址s1内存拷贝int memcmp(const void *s1, const void *s2, size_t count );比较s1和s2所指的区域中各字节的值,比较count个字节如全相同,返回0.如果s1小于s2,返回负值,否则就返回正值内存比较void * memset(void *buf, int c, size_t count)将buf所指区域设置为c值,区域大小count字节该区域的起始地址buf内存设置void *memchr(const void *buf, int c, size_t count );在buf所指区域中查找c值,区域大小count字节如找到,返回指针指向找到的字节地址,如未找到,返回NULL内存查找表B-8 时间函数与表中time_t是long的同义词。函数原型功 能返回值说 明time_t time( time_t *timer );取得系统当前时间,形参用来保存结果。如实参为NULL,返回值但不保存一个整数值,表示从1970-1-1 00:00:00到当前时间的秒数time_t是long型。该值每秒改变,常作为伪随机数种子struct tm *localtime (const time_t *timer );将time_t时间转换为tm时间,而且按本地时区调整。返回tm结构值,包括:tm_sec:0-59tm_min:0-59tm_hour:0-23tm_day:1-31tm_mon:0-11,1月为0tm_year:从1900开始tm_wday:0-6,周日为0tm_yday:0-365,1月1日为0函数gmtime转换到当前国际标准时间UTCchar *asctime( const struct tm *timeptr );将tm时间转换为字符串。返回字符串,格式为:Wed Jan 02 02:03:55 1980char *ctime( const time_t *timer );将time_t时间转换为字符串,带时区调整同上time_t mktime( struct tm *timeptr );将tm时间转换为time_t时间,tm结构中前6项就可以构造一个有效时间。如果转换错误,返回-1。判断方法如下:mktime() !=(time_t)-1与localtime函数作用相反char *_strtime(char * timestr);把当前系统时间转换为字符串,形参是输出串指向结果串格式为:hh:mm:sschar *_strdate( char *datestr );把当前系统日期转换为字符串,形参是输出串指向结果串格式为:mm/dd/yysize_t strftime(char *strDest, size_t maxsize, const char *format, const struct tm *timeptr );对tm时间转换为一个格式化字符串,用于显示。结果串的长度第3个实参要使用大量的格式控制符,请参看文档。clock_t clock( void );计算处理器所用时间。可用于延迟或时间区间度量,精确到毫

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论