C++程序设计常用库函数.docx

上传人:b****6 文档编号:5283864 上传时间:2022-12-14 格式:DOCX 页数:19 大小:25.34KB
下载 相关 举报
C++程序设计常用库函数.docx_第1页
第1页 / 共19页
C++程序设计常用库函数.docx_第2页
第2页 / 共19页
C++程序设计常用库函数.docx_第3页
第3页 / 共19页
C++程序设计常用库函数.docx_第4页
第4页 / 共19页
C++程序设计常用库函数.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

C++程序设计常用库函数.docx

《C++程序设计常用库函数.docx》由会员分享,可在线阅读,更多相关《C++程序设计常用库函数.docx(19页珍藏版)》请在冰豆网上搜索。

C++程序设计常用库函数.docx

C++程序设计常用库函数

C++程序设计常用库函数

本文主要涉及两类库函数,运行期库(run-timelibrary)和C++标准库。

下面简单介绍这些库的使用要点。

运行期库是用C语言实现的基础程序库,其它库都以此为基础。

MSDN将运行期库按功能划分,如表B-1所示。

来自MSDNLibraryVisualStudio6.0

VisualC++Documentation

UsingVisualC++

VisualC++Programmers’sGuide

Run-TimeLibraryReference

Run-TimeRoutinesbyCategory

表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个函数

时间管理

获取当前系统日期时间、转换、调整等操作

注1MSDN按以上19类功能对运行期库分组。

注2同一个函数可能出现在不同功能分组中,也可能出现在不同的头文件中。

注3运行期库是纯C语言实现,不包含C++的内容(没有重载、形参缺省值、引用、模板等)。

表B-2运行期库头文件

头文件名

功能

C++包装头文件名

断言设置

字符分类

由库函数执行,检测错误代码

浮点数计算

ISO646字符集处理

检测整数类型的性质

不同地域文字适应性

公共数学计算

执行非本地goto语句

控制各种异常条件

可变参数的函数

多种有用的类型(typedef)和宏的定义

输入和输出

多种操作函数

多种字符串的处理

系统时间处理

宽字符流,以及特殊字符串处理

宽字符分类

注1,表中列出的18个头文件是作为C++标准库,而运行期库的头文件还有许多未列入。

注2,C++标准库的头文件大多不含.h后缀。

注3,左边头文件内容被包装到C++标准的命名空间std中。

例如,文件大致如下:

namespacestd{#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-4IO流的新旧头文件对比

旧版本IO流头文件

新版本IO流头文件

注1,同一行上的两个头文件具有大致相同的功能,但内部具体类型有差别。

注2,新老版本不能用在同一个项目中,因为它们使用不同的库文件(lib文件和dll文件)。

下面是一些常用的运行期库。

表B-5数学函数

函数原型

功能

返回值

说明

intabs(intx)

longlabs(longx)

doublefabs(doublex)

求绝对值

绝对值

doublepow(doublex,doubley)

求x的y次方

计算结果

doublesqrt(doublex)

求x的平方根

计算结果

doublefmod(doublex,doubley)

求x除以y的余数

余数

使x=i*y+f,f是返回值,i是整数,且f与x相同符号

doubleceil(doublex)

大于等于x的最小整数

如ceil(2.8)==3

doublefloor(doublex)

小于等于x的最大整数

如floor(2.8)==2

doublemodf(doublex,double*y)

取x的整数部分送到y所指向的单元中

x的小数部分

将浮点数x分解为整数部分和小数部分,如-2.3分解为-2和-0.3

doubleexp(doublex)

e的x次方

doublelog(doublex)

自然对数ln(x),以e为底的对数

x>0

doublelog10(doublex)

以10为底的对数

x>0

三角函数

doublesin(doublex)

doublesinh(doublex)

正弦sin(x)

双曲正弦sinh(x)

计算结果

x为弧度值

doublecos(doublex)

doublecosh(doublex)

余弦cos(x)

双曲余弦cosh(x)

计算结果

x为弧度值

doubletan(doublex)

doubletanh(doublex)

正切tan(x)

双曲正切

计算结果

x为弧度值

doubleasin(doublex)

反正弦arcsin(x)

-1≤x≤1

doubleacos(doublex)

反余弦arccos(x)

计算结果

-1≤x≤1

doubleatan(doublex)

反正切arctan(x)

计算结果

表B-6C标准库

函数原型

功能

返回值

说明

voidsrand(unsignedintseed)

设置伪随机数序列的起点,即随机数生成种子

先设置种子,再调用rand生成随机数

intrand(void)

生成一个伪随机整数

随机正整数,>0

voidabort(void)

终止进程,而没有刷新缓冲区,也没有执行清理

不到万不得已,不要调用

voidexit(intstatus)

先执行清理,刷新缓冲区,关闭打开的文件,最后终止进程

返回0表示正常,其它值表示错误。

返回值可被操作系统的批处理命令获得。

intsystem(constchar*command)

执行command串的操作系统命令

返回值就是指定命令执行所返回的值,0表示正常

启动命令后等待返回。

voidqsort(void*base,size_tnum,size_twidth,int(__cdecl*compare)(constvoid*elem1,constvoid*elem2));

对任意类型的数组进行快速排序(冒泡排序的改进)。

base是数组名,num是元素个数,width是元素的字节大小,最后形参是比较函数指针

比较函数返回0,表示两元素相等。

升序排序要求:

返回值小于0,表示elem1小于elem2;返回大于0,表示elem1大于elem2。

降序相反。

void*bsearch(constvoid*key,constvoid*base,size_tnum,size_twidth,int(__cdecl*compare)(constvoid*elem1,constvoid*elem2));

折半查找,base数组元素要按升序排序,元素个数为num,元素大小为width字节,查找key,最后一个形参是比较函数的指针。

如果未找到,就返回NULL。

如果找到就返回指针指向数组中的key

如果数组未按升序排序,或者元素有重复,那么结果可不可预测。

比较函数与qsort要求相同。

动态内存管理

void*malloc(size_tsize);

动态请求分配size字节的内存,但可能得到更大空间,因为内存分块管理。

如果内存不够,就返回NULL。

否则返回指针指向所分配的内存

用free函数来回收内存。

C基础函数,许多其它函数要调用该函数。

void*calloc(size_tnum,size_tsize);

动态请求分配一个数组,而且初始化为0。

num个元素,每个元素大小为size个字节

同上

void*realloc(void*memblock,size_tsize);

对已分配的空间重新分配,可改变大小。

如果第一个形参为NULL,就等同于malloc函数

同上

voidfree(void*memblock);

动态回收所分配的内存,实参指针一定是用malloc、calloc或realloc得到的

如果实参指针错误,可能导致不可预料的错误

数据转换

inttolower(intc);

将字符c转换为小写,如果可能的话

小写字符

inttoupper(intc);

将字符c转换为大写,如果可能的话

大写字符

intatoi(constchar*string)

字符串转换为整数

整数

doubleatof(constchar*string)

字符串转换为double

double值

doublestrtod(constchar*string,char**endptr);

字符串转换到double,而且得到停止指针

double值

第2个形参得到字符串中停止扫描的字符指针。

strtol函数处理long

strtoul处理unsignedlong

char*_itoa(intvalue,char*string,intradix);

将int型value按基数redix转换到字符串string

返回结果串

基数范围2-36。

_ltoa函数针对long型。

_ultoa针对unsignedlong型

char*_gcvt(doublevalue,intdigits,char*buffer);

将double型value转换到字符缓冲区buffer中

返回结果串

第2个形参确定有效位数

char*_ecvt(doublevalue,intcount,int*dec,int*sign);

将double型value转换到字符串,第2个形参确定总的有效位数

返回结果串,

串中无小数点

第3个形参得到小数点位置(0和负值表示小数点在数字左边),第4个形参得到符号位(0为正,1为负)

char*_fcvt(doublevalue,intcount,int*dec,int*sign);

将double型value转换到字符串,第2个形参确定小数点后的有效位数

返回结果串,

串中无小数点

第3个形参得到小数点位置(0和负值表示小数点在数字左边),第4个形参得到符号位(0为正,1为负)

表B-7字符串函数

size_t是用typedef定义的unsignedint的同义词。

NULL是值为0的宏,每个串char*都以NULL结尾。

形参中所有const修饰的串都不可改变,反之,无const修饰的串都可改变,而且作为结果。

注意,用NULL作为实参调用下面函数将导致运行错误。

函数原型

功能

返回值

说明

intstrlen(constchar*string)

求字符串的长度

字符串包含的字符个数

char*strcpy(char*s1,constchar*s2)

将s2串拷贝到s1中

目的存储区的始址s1

char*strncpy(char*p1,constchar*p2,size_tcount);

将s2串拷贝到p1中,只拷贝count个字符

同上

intstrcmp(constchar*s1,constchar*s2)

比较两个字符串s1和s2

如两串相同,就返回0。

s1串小于s2串,返回负数,否则返回正数

从前向后逐个字符比较

intstrncmp(constchar*s1,constchar*s2,size_tcount);

比较两个字符串s1和s2,只比较前count个字符

同上

int_stricmp(constchar*s1,constchar*s2);

比较两个字符串s1和s2,而且忽略大小写

同上

int_strnicmp(constchar*s1,constchar*s2,size_tcount);

比较两个字符串s1和s2,只比较前count个字符,而且忽略大小写

同上

char*strcat(char*s1,constchar*s2)

将s2串拼接到s1串的后面

目的存储区的始址s1

char*strncat(char*s1,constchar*s2,size_tcount);

将s2串拼接到s1串的后面,只拼接前count个字符

同上

char*_strrev(char*string);

转换为逆向串

返回结果串

char*_strlwr(char*string);

转换为小写串

返回结果串

char*_strupr(char*string);

转换为大写串

返回结果串

char*strchr(constchar*s,intc);

在s串中查找字符c的首次出现位置

如找到,返回指针指向该字符位置。

如未找到,返回NULL

char*strrchr(constchar*s,intc);

在s串中查找字符c的最后出现位置

如找到,返回指针指向该字符位置。

如未找到,返回NULL

char*strstr(constchar*s1,constchar*s2)

查找子串,在s1串中从前向后查找s2串首次出现位置

如找到,就返回s1中s2出现的位置,否则就返回NULL

s2作为一个串

char*strpbrk(constchar*s1,constchar*s2);

在s1串中从前向后查找s2中某个字符出现的位置

如找到,返回s1中的位置。

如果s1和s2没有共同字符,返回NULL

s2作为一个字符集,而不是串。

如,

s1="xyzabg"

s2="abc"

返回"abg"

size_tstrspn(constchar*s1,constchar*s2);

在s1串中从前向后计数s2中字符的个数。

即求s1串中前面有多少个字符在s2范围中。

返回整数表示在s1串中第一个不在s2中的字符的位置。

如果s1串的第1个字符不在s2中,就返回0。

s2作为一个字符集,而不是串。

如,

s1="cabbage"

s2="abc"

返回5

size_tstrcspn(constchar*s1,constchar*s2);

在s1串中从前向后计数不在s2中字符的个数。

即求s1串中前面有多少个字符都不在s2范围中。

返回整数表示在s1串中第一个在s2中的字符的位置。

如果s1串第1个字符在s2中,就返回0。

s2作为一个字符集,而不是串。

如,

s1="xyzabc"

s2="abc"

返回3

char*strtok(char*s1,constchar*s2);

在s1串中查找s2中的分割符,并用NULL替代分隔符,使s1分割为多个子串标记token

返回第一个分隔符所分割的token串。

下面调用用NULL作为s1的实参,可获取后面的字串标记

s2作为一个分隔字符集,而不是串。

缓冲区管理(按字节处理)

void*memcpy(void*s1,constvoid*s2,size_tcount)

将s2所指的共count个字节拷贝到s1所指存储区中

目的存储区的始址s1

内存拷贝

intmemcmp(constvoid*s1,constvoid*s2,size_tcount);

比较s1和s2所指的区域中各字节的值,比较count个字节

如全相同,返回0.

如果s1小于s2,返回负值,否则就返回

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1