C++程序设计常用库函数
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C++程序设计常用库函数
本文主要波及两类库函数,运转期库(run-time library) 和C++ 标准库。
下边简单介绍这些库的使用要点。
运转期库是用 C 语言实现的基础程序库,其余库都以此为基础。
MSDN 将运转期库按功能区分,如表 B-1 所示。
来自 MSDN Library Visual Studio 6.0
Visual C++ Documentation
Using Visual C++
Visual C++ Programmers ’s Guide
Run-Time Library Reference
Run-Time Routines by Category
表 B-1 运转期库
分类功能有关头文件 ( 不完好 )
可变参数用于定义可变参数的函数<stdarg.h>
缓冲区管理按字节管理内存缓冲区<string.h><memory.h>
按字节分类多字节字符分类,与目前多字节代码页有关<ctype.h>
按字符分类对单字节字符、宽字符、多字节字符进行分<ctype.h>
类。
比较常用,如 isalpha, isprint 。
数据变换一种数据变换到另一种,比如字符串到int <math.h><stdlib.h>
或 double ,或反之。
有好多变换既有函数
实现,也有宏实现,可选择。
调试程序debug 调试,函数库中有特意的调试版本,<assert.h><crtdbg.h>
支持单步履行、断言、错误检测、异样,跟
踪堆空间分派,防止内存泄漏,以及调试信
息报告等。
目录控制读取或改变目录,创立、删除目录等,也包<stdlib.h><direct.h>
括使用环境路径来搜寻文件
错误办理包含断言、检测 IO 错误、消除错误标志、<assert.h><crtdbg.h><stdio.h>
判断初级 IO 的文件尾 eof 等。
<io.h>
异样办理程程序停止办理 (terminate) 、不测办理<eh.h>
序(unexpected)
文件办理对磁盘文件的成立、删除、更名、文件接见<stdio.h><io.h><sys/locking.h>
允许等操作。
<errno.h>
浮点数支持特意针对浮点数的计算,如指数、对数、三<math.h> <stdlib.h><float.h>
角函数、双曲函数等,也包含错误检测,如
溢出。
输入输出从文件或设施中读入数据或写出数据。
文件<stdio.h><io.h><conio.h>
IO 要区分文本模式和二进制模式。
IO 分为
以下三类:
1、流式 IO ,将数据作为字符或字节序列,
有缓冲。
2、初级 IO ,直接调用操作系统,无缓冲。
3、控制台与端口IO ,对键盘和字符显示器的直接读写,对IO 设施,如打印机、串行口的直接读写。
国际化适应不一样语言,与地区locale 有关程序、
宽字符、多字节字符、通用文本等等。
内存分派动向分派、回收内存,如malloc 、 free
等函数。
<locale.h> <wchar.h><stdio.h> <string.h><ctype.h><mbstring.h> <stdlib.h> <malloc.h><new.h>
进度控制与进度的启动、停止与管理,也包含线程的启<process.h> <stdlib.h>
环境控制停。
操作系统环境信息的读取与改变。
排序与查找对随意种类数组进行排序,折半查找与线性<stdlib.h> <search.h>
查找。
字符串管理对以 NULL 结尾的各样字符串进行操作<string.h><memory.h><wchar.h>
<mbstring.h>
系统调用用来查找文件的 3 个函数<io.h>
时间管理获取目前系统日期时间、变换、调整等操作<time.h><sys/timeb.h> 注 1 MSDN 按以上 19 类功能对运转期库分组。
注 2 同一个函数可能出此刻不一样功能分组中,也可能出此刻不一样的头文件中。
注 3 运转期库是纯 C 语言实现,不包含C++ 的内容 (没有重载、形参缺省值、引用、模板等)。
表 B-2 运转期库头文件
头文件名功能C++ 包装头文件名
<assert.h> 断言设置<cassert>
<ctype.h> 字符分类<cctype>
<errno.h> 由库函数履行,检测错误代码<cerrno>
<float.h> 浮点数计算<cfloat>
<iso646.h> ISO 646 字符集办理<ciso646>
<limits.h> 检测整数种类的性质<climits>
<locale.h> 不一样地区文字适应性<clocale>
<math.h> 公共数学计算<cmath>
<setjmp.h> 履行非当地 goto 语句<csetjmp>
<signal.h> 控制各样异样条件<csignal>
<stdarg.h> 可变参数的函数<cstdarg>
<stddef.h> 多种实用的种类 (typedef) 和宏的定义<cstddef>
<stdio.h> 输入和输出<cstdio>
<stdlib.h> 多种操作函数<cstdlib>
<string.h> 多种字符串的办理<cstring>
<time.h> 系统时间办理<ctime>
<wchar.h> 宽字符流,以及特别字符串办理<cwchar>
<wctype.h> 宽字符分类<cwctype>
注 1,表中列出的 18 个头文件是作为 C++ 标准库,而运转期库的头文件还有很多未列入。
注
2, C++标准库的头文件大多不含 .h 后缀。
注 3,左侧头文件内容被包装到 C++标准的命名空间 std 中。
比如, <cassert>文件大概以下:namespace std {#include <assert.h> };
表 B-3标准C++库头文件
头文件名
<algorithm>
<bitset>
<complex> <deque>
<exception> <fstream> <functional> <iomanip> <ios>
<iosfwd>
<iostream> <iso646.h> <istream> <iterator>
<limits>
<list>
<locale>
<map>
<memory> <numeric> <ostream> <queue>
<set>
<sstream> <stack>
<stdexcept> <streambuf> <string> 功能
算法,供给了 70 多个模板函数,经过迭代器作用于各样容器,实现排序、查找、
会合运算等算法。
位集,一个模板类和两个支持模板函数。
复数,一个模板类和若干模板函数
双端行列容器, 1 个模板类和 3 个支持模板
定义异样基类exception,若干模板函数,近似<eh.h>中的定义
支持磁盘文件的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类型。
<strstream> 支持对字符数组对象的 iostream 操作,支持与 C 字符串的变换
<utility> 定义了对偶 pair ,作为映照和多射的基本元素
<valarray> 定义了 valarray 模板类,支持可变长的数组
<vector> 向量容器, 1 个模板类和 3 个支持模板
注 1 ,表中列出了32 个头文件,加上前面18 个包装头文件,共50 个头文件,构成 C++ 标准库。
注 2 ,还有几个头文件未列入文档,<hash_map>、 <hash_set>、 <new>,它们没有被完好实现。
注 3 ,上表中包含了 10 个新版本的IO 流头文件,而老版本只有8 个头文件,对应关系以下表。
表 B-4 IO流的新旧头文件对照
旧版本 IO 流头文件新版本IO流头文件
<ios.h><ios>
<streamb.h><streambuf>
<iomanip.h><iomanip>
<istream.h><istream>
<ostream.h><ostream>
<iostream.h><iostream>
<fstream.h><fstream>
<strstrea.h><strstream>
<iosfwd>
<sstream>
注 1,同一行上的两个头文件拥有大概同样的功能,但内部详细种类有差异。
注 2,新老版本不可以用在同一个项目中,由于它们使用不一样的库文件(lib 文件和 dll 文件 ) 。
下边是一些常用的运转期库。
表 B-5 数学函数 <math.h>
函数原型
int abs(int x)
long labs(long x)
double fabs(double x)
double pow(double x, double y)
double sqrt(double x)
double fmod(double x, double y)
double ceil(double x)
double floor(double x)
double modf(double x, double *y)
double exp(double x)
double log(double x)
double log10(double x)
三角函数
double sin(double x)
double sinh(double x)
double cos(double x)
double cosh(double x)
double tan(double x) 功能返回值说明
求绝对值绝对值
求 x 的 y 次方计算结果
求 x 的平方根计算结果
求 x 除以 y 的余数余数使 x=i*y+f , f 是返回
值,i 是整数,且 f 与 x
同样符号
大于等于 x 的最小整数如 ceil(2.8) ==3
小于等于 x 的最大整数如 floor(2.8)==2
取 x 的整数部分送到 y x 的小数部分将浮点数 x 分解为整数所指向的单元中部分和小数部分,如
-2.3 分解为 -2 和 -0.3 e 的 x 次方
自然对数 ln(x) ,以 e x>0
为底的对数
以 10 为底的对数x>0
正弦 sin(x) 计算结果x 为弧度值
双曲正弦 sinh(x)
余弦 cos(x) 计算结果x 为弧度值
双曲余弦 cosh(x)
正切 tan(x) 计算结果x 为弧度值
double tanh(double x) double asin(double x) double acos(double x) double atan(double x) 双曲正切
反正弦 arcsin(x) - 1≤x≤1反余弦 arccos(x) 计算结果- 1≤x≤1反正切 arctan(x) 计算结果
表 B-6 C 标准库 <stdlib.h>
函数原型
void srand(unsigned int
seed)
int rand(void)
void abort(void)
void exit(int status)
int system(const char *command)
void qsort( void *base,
size_t num,size_t width,int(__cdecl
*compare)(const void *elem1, const void *elem2 ) );
void *bsearch(const void *key, const void *base,
size_t num,size_t width,int(__cdecl *compare ) ( const void
*elem1,const void *elem2 ) );
动向内存管理
void*malloc(size_t
size );
void *calloc(size_t num, size_t size ); 功能返回值
设置伪随机数序列的起
点,即随机数生成种子
生成一个伪随机整数随机正整数, >0
停止进度,而没有刷新
缓冲区,也没有履行清
理
先履行清理,刷新缓冲
区,封闭翻开的文件,
最后停止进度
履行 command串的操返回值就是指定
作系统命令命令履行所返回
的值, 0 表示正
常
对随意种类的数组进行
迅速排序 ( 冒泡排序的
改良 ) 。
base是数组
名, num 是元素个数,
width是元素的字节
大小,最后形参是比较
函数指针
折半查找, base数组假如未找到,就
元素要按升序排序,元返回NULL。
假如
素个数为num,元素大找到就返回指针
小为 width字节,查找指向数组中的
key ,最后一个形参是key
比较函数的指针。
动向恳求分派size字假如内存不够,
节的内存,但可能获取就返回 NULL 。
否
更大空间,由于内存分则返回指针指向
块管理。
所分派的内存
动向恳求分派一个数同上
组,并且初始化为0 。
num 个元素,每个元素
大小为 size个字节
说明
先设置种子,再调用
rand生成随机数
不到万不得已,不要调
用
返回 0 表示正常,其余
值表示错误。
返回值可
被操作系统的批办理命
令获取。
启动命令后等候返回。
比较函数返回 0 ,表示两
元素相等。
升序排序要
求:返回值小于 0 ,表示
elem1 小于 elem2 ;返回
大于 0,表示 elem1 大于
elem2 。
降序相反。
假如数组未按升序排序,
或许元素有重复,那么结
果可不行展望。
比较函数
与 qsort 要求同样。
用 free 函数往返收内存。
C 基础函数,很多其余
函数要调用该函数。
void*realloc(void *memblock, size_t size );
void free(void *memblock ); 数据变换对已分派的空间从头分同上配,
可改变大小。
假如
第一个形参为NULL ,
就等同于 malloc函数
动向回收所分派的内
存,实参指针必定是用
malloc 、 calloc或
realloc获取的
假照实参指针错误,可
能致使不行料想的错误
int tolower(int c);
int toupper(int c);
int atoi(const char* string)
double atof(const char* string)
double strtod(const char *string,char **endptr );
char*_itoa(int value, char*string,int radix);
char *_gcvt(double value, int digits, char *buffer);
char*_ecvt(double value,int count,int *dec, int *sign);
char*_fcvt(double value,int count,int *dec, int *sign); 将字符 c 变换为小写,小写字符
假如可能的话
将字符 c 变换为大写,大写字符
假如可能的话
字符串变换为整数整数
字符串变换为double double值
字符串转换到double 值第 2 个形参获取字符串double ,并且获取停中停止扫描的字符指
止指针针。
strtol 函数办理 long
strtoul 处理
unsigned long
将 int 型 value 按基返回结果串基数范围 2-36 。
数 redix 变换到字符_ltoa 函数针对 long 串 string 型。
_ultoa 针对
unsigned long 型将 double 型 value 返回结果串第 2 个形参确立有效位变换到字符缓冲区数
buffer 中
将 double 型 value 返回结果串,第 3 个形参获取小数点变换到字符串,第 2 个串中无小数点地点 (0 和负值表示小数形参确立总的有效位数点在数字左侧 ) ,第 4 个
形参获取符号位(0 为
正, 1 为负 )
将 double 型 value 返回结果串,第 3 个形参获取小数点变换到字符串,第 2 个串中无小数点地点 (0 和负值表示小数形参确立小数点后的有点在数字左侧 ) ,第 4 个效位数形参获取符号位(0 为
正, 1 为负 )
表 B-7 字符串函数 <string.h>
size_t是用typedef定义的unsigned int的同义词。
NULL是值为0的宏,每个串char*都
以 NULL 结尾。
形参中全部const修饰的串都不行改变,反之,无const修饰的串都可改变,并且
作为结果。
注意,用NULL 函数原型
int strlen(const char *string)
char * strcpy(char *s1, const char *s2)
char *strncpy(char *p1, const char *p2, size_t
count );
int strcmp(const char *s1, const char *s2)
int strncmp(const char
*s1, const char *s2, size_t count );
int _stricmp(const char *s1, const char *s2);
int _strnicmp(const char *s1, const char *s2, size_t count );
char * strcat(char *s1, const char * s2)
char *strncat(char *s1, const char *s2, size_t
count );
char *_strrev( char *string );
char *_strlwr( char *string);
char *_strupr( char *string ); 作为实参调用下边函数将致使运转错误。
功能返回值说明
求字符串的长度字符串包含的字符个数
将 s2 串拷贝到 s1 中目的储存区的始址s1
将 s2 串拷贝到 p1 中,同上只拷
贝 count 个字符
比较两个字符串s1 和如两串同样,就返回 0 。
以前向后逐一s2 s1 串小于 s2 串,返回负字符比较
数,不然返回正数
比较两个字符串s1 和同上
s2 ,只比较前 count 个
字符
比较两个字符串s1 和同上
s2 ,并且忽视大小写
比较两个字符串s1和同上
s2 ,只比较前count个
字符,并且忽视大小写
将 s2 串拼接到s1 串的目的储存区的始址s1
后边
将 s2 串拼接到 s1 串的同上后
边,只拼接前 count
个字符
变换为逆向串返回结果串
变换为小写串返回结果串
变换为大写串返回结果串
char *strchr(const char 在 s 串中查找字符 c 的首如找到,返回指针指向该
*s, int c); 次出现地点字符地点。
如未找到,返
回 NULL
char *strrchr(const 在 s 串中查找字符 c 的最如找到,返回指针指向该
char *s, int c ); 后出现地点字符地点。
如未找到,返
回 NULL
char * strstr(const 查找子串,在s1 串中从如找到,就返回 s1 中 s2 s2 作为一个串char *s1, const char 前向后查找 s2 串初次出出现的地点,不然就返回
*s2) 现地点NULL
char *strpbrk(const 在 s1 串中以前向后查找如找到,返回s1 中的位s2 作为一个字char *s1, const char s2 中某个字符出现的位置。
假如 s1 和 s2 没有符集,而不是*s2); 置共同字符,返回 NULL 串。
如,
size_t strspn(const char*s1,const char *s2);
size_t strcspn(const char*s1,const char *s2);
char *strtok(char *s1,
const char *s2);
缓冲区管理 ( 按字节办理 ) void * memcpy(void *s1, const void *s2, size_t
count)
int memcmp(const void *s1, const void *s2, size_t count );
void * memset(void *buf, int c, size_t count)
void *memchr(const void *buf, int c, size_t count ); 在 s1 串中以前向后计数
s2中字符的个数。
即求
s1串中前面有多少个字
符在 s2 范围中。
在s1 串中以前向后计数
不在s2 中字符的个数。
即求 s1 串中前面有多少
个字符都不在 s2 范围中。
在s1 串中查找s2 中的切
割符,并用 NULL 代替
分开符,使 s1 切割为多
个子串标志 token
将 s2 所指的共 count
个字节拷贝到 s1 所指储存
区中
比较 s1 和 s2 所指的区
域中各字节的值,比较
count 个字节
将 buf所指地区设
置为
c 值,地区大小 count 字
节
在 buf所指地区中
查找
c 值,地区大小 count 字
节
s1= "xyzabg"
s2="abc"
返回 "abg"
返回整数表示在s1 串中s2 作为一个字
第一个不在 s2 中的字符符集,而不是
的地点。
假如s1 串的第串。
如,
1 个字符不在s
2 中,就s1=
返回 0。
"cabbage"
s2="abc"
返回 5
返回整数表示在s1 串中s2 作为一个字
第一个在 s2 中的字符的符集,而不是
地点。
假如 s1 串第 1个串。
如,
字符在 s2 中,就返回 0 。
s1= "xyzabc"
s2="abc"
返回 3
返回第一个分开符所分s2 作为一个分
割的 token 串。
下边调隔字符集,而不
用用 NULL 作为 s1 的实是串。
参,可获取后边的字串标
记
目的储存区的始址s1内存拷贝
如全同样,返回 0. 内存比较假如 s1 小
于 s2 ,返回负
值,不然就返回正当
该地区的开端地点buf内存设置
如找到,返回指针指向找内存查找到
的字节地点,如未找
到,返回 NULL
表 B-8 时间函数 <time.h> 与 <sys/timeb.h>
表中 time_t 是 long 的同义词。
函数原型功能返回值说明
time_t time( time_t 获得系统目前时间,形参一个整数值,表示从time_t 是*timer ); 用来保留结果。
照实参为1970-1-1 00:00:00 long 型。
NULL ,返回值但不保留到目前时间的秒数该值每秒改
变,常作为伪
随机数种子struct tm *localtime 将 time_t 时间变换为返回 tm 结构值,包含:函数 gmtime
(const time_t*timer);
char *asctime( const struct tm *timeptr );
char *ctime( const time_t
*timer );
time_t mktime( struct tm
*timeptr );
char*_strtime(char* timestr);
char*_strdate(char *datestr );
size_t strftime(char
*strDest,size_t maxsize,const char *format,const struct tm *timeptr ); tm 时间,并且按当地时tm_sec:0-59 变换到目前国区调整。
tm_min:0-59 际标准时间
tm_hour:0-23 UTC
tm_day:1-31
tm_mon:0-11 ,1 月为 0
tm_year: 从 1900 开始
tm_wday:0-6,周日为0
tm_yday:0-365,1 月 1
日为 0
将 tm 时间变换为字符返回字符串,格式为:
串。
Wed Jan 02 02:03:55
1980
将 time_t 时间变换为同上
字符串,带时区调整
将 tm 时间转换为假如变换错误,返回 -1 。
与
time_t 时间, tm 结构判断方法以下:localtime
中前 6 项就能够结构一mktime()!=(time_t 函数作用相反个有效时间。
)-1
把目前系统时间变换为指向结果串格式为 :
字符串,形参是输出串hh:mm:ss
把目前系统日期变换为指向结果串格式为 :
字符串,形参是输出串mm/dd/yy
对 tm 时间变换为一个格结果串的长度第 3 个实参要式化字符串,用于显示。
使用大批的格
式控制符,请
参看文档。
clock_t clock( void );
void _ftime( struct _timeb *timeptr );
void _tzset( void ); 计算办理器所用时间。
可用于延缓或时间区间
胸怀,精准到毫秒。
获取系统目前时间,形参
用来保留结果。
_timeb 结
构中包含成员:
dstflag:非0表示夏
令时
millitm:毫秒数
time:即 time_t值
timezone:相对UTC
的时间差 ( 以分钟为单
位 ) ,如中国为 -480 ,比
UTC早 8 小时
依据目前环境变量来设
返回时钟滴答数目。
两次调用返回
clock_t是一个long。
值之差就是间
CLOCK_PER_SEC 表示每秒隔的毫秒数。
时钟滴答数的常量,如
1000 。
比
localtime
函数获取更多
信息
在执行
表 B-9 可变参数 <stdarg.h> 函数原型 ( 有参宏 )
void va_start(va_list
arg_ptr, prev_param );
va_arg( va_list arg_ptr,
type );
void va_end( va_list
arg_ptr ); 置 3 个全局变量:
_daylight,
_timezone和
_tzname,详见MSDN文
档
功能
可变参数初始化,使参数表 arg_ptr 指
向固定形参 prev_param 以后的头一个
可变形参
将 arg_list中的目前实参变换为指
定种类 type 以后,再返回。
返回前指
向下一个可变实参。
对可变参数表进行
复位
_ftime、
time或
localtime
函数前应先执
行该函数
返回值说明
先用va_list
说明一个变量,
再作为本函数的
头一个实参
返回读取循环调用该函数
到的实参将获取多个可变
值实参
最后一步
表 B-10 断言 <assert.h> 与 <crtdbg.h>
函数原型 ( 有参宏 ) 功能返回值说明
void assert( int 计算指定的表达式,假如为在程序中增添诊expression ); 0(false) ,就打印该表达式、文件断断言,以保证定义在 <assert.h> 名及行号,而后调用 abort() 函数终知足特定条件才
止程序。
假如表达式计算为非能持续履行。
这
0(true) ,不显示任何信息,也没有是最简单的程序
其余动作。
检测手段。
该宏在调试和运转时都可起作用。
如
要停止起作用,只要在包含
<assert.h> 前定义 NDEBUG宏。
ASSERT( boolExpr); 这两个宏与 assert 相像。
只在
_ASSERTE(boolExpr); _DEBUG 宏有效时才起作用,即只在
定义在 <crtdbg.h> 中调试程序时才起作用,在运转时辰不
起作用。