C++库常用函数一览

来源:互联网 发布:php 大端 big endian 编辑:程序博客网 时间:2024/05/20 04:13

原文地址:http://blog.sina.com.cn/s/blog_6c85378d0100lelj.html

本文中提到的函数库有:<string> <cctype> <algorithm> <cmath> <cstdlib> <iomanip> <numeric>

1.  标准C++库字符串类std::string的用法

begin      得到指向字符串开头的Iterator
end         得到指向字符串结尾的Iterator
rbegin      得到指向反向字符串开头的Iterator
rend        得到指向反向字符串结尾的Iterator
size        得到字符串的大小
length()    和size函数功能相同
max_size    字符串可能的最大大小
capacity    在不重新分配内存的情况下,字符串可能的大小
empty       判断是否为空
operator[]  取第几个元素,相当于数组
c_str       取得C风格的const char*字符串
data        取得字符串内容地址
operator=   赋值操作符
reserve     预留空间
swap        交换函数
insert      插入字符
append      追加字符
push_back   追加字符
erase       删除字符串
clear       清空字符容器中所有内容
resize      重新分配空间
assign      和赋值操作符一样
replace     替代
copy        字符串到空间
find        查找,返回基于0的索引号
rfind       反向查找

find_first_of       查找包含子串中的任何字符,返回第一个位置
find_first_not_of    查找不包含子串中的任何字符,返回第一个位置
find_last_of         查找包含子串中的任何字符,返回最后一个位置
find_last_not_of     查找不包含子串中的任何字符,返回最后一个位置
substr(n1,len)       得到字符串从n1开始的长度为len的子串
compare              比较字符串(支持所有的关系运算符)
operator+            字符串链接
operator+=           += 操作符
operator==           判断是否相等
operator!=           判断是否不等于
operator<            判断是否小于
operator>>           从输入流中读入字符串
operator<<           字符串写入输出流
getline              从输入流中读入一行

2.cctype

using ::isalpha; //是否字母

using ::iscntrl; //是否控制符

using ::isdigit; //是否是数字

using ::isgraph; //是否字母、数字或标点

using ::islower; //是否小写

using ::isprint; //是否可打印字符

using ::ispunct; //是否标点

using ::isspace; //是否空格

using ::isupper; //是否大写

using ::isxdigit; //是否十六进制数字

using ::tolower; //转为小写

using ::toupper; //转为大写

3 algorithm.

 

循环

对序列中的每个元素执行某项操作

for_each()

查找

在序列中找出某个值的第一次出现的位置

find(a,a+size,n)返回b,当b=a+size即没找到,a为指针

在序列中找出符合某谓词的第一个元素

find_if()

在序列中找出一子序列的最后一次出现的位置

find_end()

在序列中找出第一次出现指定值集中之值位置

find_first_of()

在序列中找出相邻的一对值

adjacent_find()

计数

在序列中统计某个值出现的次数

count()

在序列中统计与某谓词匹配的次数

count_if()

比较

找出两个序列相异的第一个元素

mismatch()

两个序列中的对应元素都相同时为真

equal(a,a+n,b,cmp)

在序列中找到等于某值的连续n次出现的位置

equal_range(a,a+n,x)

搜索

在序列中找出一子序列的第一次出现的位置

search()

在序列中找出一值的连续n次出现的位置

search_n()

复制

从序列的第一个元素起进行复制

copy()

从序列的最后一个元素起进行复制

copy_backward()

交换

交换两个元素

swap()

交换指定范围的元素

swap_ranges()

交换由迭代器所指的两个元素

iter_swap()

变换

将某操作应用于指定范围的每个元素

transform()

替换

用一个给定值替换一些值

replace()

替换满足谓词的一些元素

replace_if()

复制序列时用一给定值替换元素

replace_copy()

复制序列时替换满足谓词的元素

replace_copy_if()

填充

用一给定值取代所有元素

fill()

用一给定值取代前n个元素

fill_n()

生成

用一操作的结果取代所有元素

generate()

用一操作的结果取代前n个元素

generate_n()

删除

删除具有给定值的元素

remove()

删除满足谓词的元素

remove_if()

复制序列时删除具有给定值的元素

remove_copy()

复制序列时删除满足谓词的元素

remove_copy_if()

唯一

删除相邻的重复元素

unique()

复制序列时删除相邻的重复元素

unique_copy()

反转

反转元素的次序

reverse(a,a+n)

复制序列时反转元素的次序

reverse_copy()

环移

循环移动元素

rotate(a,a+m,a+n)

以m位置为界交换前后序列

复制序列时循环移动元素

rotate_copy()

随机

采用均匀分布来随机移动元素

random_shuffle()

划分

将满足某谓词的元素都放到前面

partition()

将满足某谓词的元素都放到前面并维持原顺序

stable_partition()

排序

以很好的平均效率排序

sort(a,a+20,cmp)

bool cmp( int a, int b )

{ return a>b; }

在容器中或string用begin()

排序,并维持相同元素的原有顺序

stable_sort()

将序列的前一部分排好序

partial_sort()

复制的同时将序列的前一部分排好序

partial_sort_copy()

第n个元素

将第n各元素放到它的正确位置

nth_element()

二分检索

找到大于等于某值的第一次出现

lower_bound()

找到大于某值的第一次出现

upper_bound()

找到(在不破坏顺序的前提下)可插入给定值的最大范围

equal_range()

在有序序列中确定给定元素是否存在

binary_search()

归并

归并两个有序序列

merge()

归并两个接续的有序序列

inplace_merge()

有序结构上的集合操作

一序列为另一序列的子序列时为真

includes()

构造两个集合的有序并集

set_union()

构造两个集合的有序交集

set_intersection()

构造两个集合的有序差集

set_difference()

构造两个集合的有序对称差集(并-交)

set_symmetric_difference()

堆操作

向堆中加入元素

push_heap()

从堆中弹出元素

pop_heap()

从序列构造堆

make_heap()

给堆排序

sort_heap()

最大和最小

两个值中较小的

min()

两个值中较大的

max()

序列中的最小元素

min_element(a,a+n)

序列中的最大元素

max_element()

词典比较

两个序列按字典序的第一个在前

lexicographical_compare()

排列生成器

按字典序的下一个排列

next_permutation()

按字典序的前一个排列

prev_permutation()

4 cmath

using ::abs; //绝对值

using ::acos; //反余弦

using ::acosf; //反余弦

using ::acosl; //反余弦

using ::asin; //反正弦

using ::asinf; //反正弦

using ::asinl; //反正弦

using ::atan; //反正切

using ::atan2; //y/x的反正切

using ::atan2f; //y/x的反正切

using ::atan2l; //y/x的反正切

using ::atanf; //反正切

using ::atanl; //反正切

using ::ceil; //上取整

using ::ceilf; //上取整

using ::ceill; //上取整

using ::cos; //余弦

using ::cosf; //余弦

using ::cosh; //双曲余弦

using ::coshf; //双曲余弦

using ::coshl; //双曲余弦

using ::cosl; //余弦

using ::exp; //指数值

using ::expf; //指数值

using ::expl; //指数值

using ::fabs; //绝对值

using ::fabsf; //绝对值

using ::fabsl; //绝对值

using ::floor; //下取整

using ::floorf; //下取整

using ::floorl; //下取整

using ::fmod; //求余

using ::fmodf; //求余

using ::fmodl; //求余

using ::frexp; //返回value=x*2n中x的值,n存贮在eptr中

using ::frexpf; //返回value=x*2n中x的值,n存贮在eptr中

using ::frexpl; //返回value=x*2n中x的值,n存贮在eptr中

using ::ldexp; //返回value*2exp的值

using ::ldexpf; //返回value*2exp的值

using ::ldexpl; //返回value*2exp的值

using ::log; //对数

using ::log10; //对数

using ::log10f; //对数

using ::log10l; //对数

using ::logf; //对数

using ::logl; //对数

using ::modf; //将双精度数value分解成尾数和阶

using ::modff; //将双精度数value分解成尾数和阶

using ::modfl; //将双精度数value分解成尾数和阶

using ::pow; //计算幂

using ::powf; //计算幂

using ::powl; //计算幂

using ::sin; //正弦

using ::sinf; //正弦

using ::sinh; //双曲正弦

using ::sinhf; //双曲正弦

using ::sinhl; //双曲正弦

using ::sinl; //正弦

using ::sqrt; //开方

using ::sqrtf; //开方

using ::sqrtl; //开方

using ::tan; //正切

using ::tanf; //正切

using ::tanh; //双曲正切

using ::tanhf; //双曲正切

using ::tanhl; //双曲正切

using ::tanl; //正切

5.cstdlib

double atof(const char *str);

把字符串str转换成double类型。等价于:strtod(str, (char**)NULL)。

 

int atoi(const char *str);

把字符串str转换成int类型。等价于:(int)strtol(str, (char**)NULL, 10)。

long atol(const char *str);

把字符串str转换成long类型。等价于:strtol(str, (char**)NULL, 10)。

double strtod(const char *start, char **end);

把字符串start的前缀转换成double类型。在转换中跳过start的前导空白符,然后逐个读入构成数的字符,任何非浮点数成分的字符都会终止上述过程。如果end不为NULL,则把未转换部分的指针保存在*end中。

如果结果上溢,返回带有适当符号的HUGE_VAL,如果结果下溢,那么函数返回0。在这两种情况下,errno均被置为ERANGE。

long int strtol(const char *start, char **end, int radix);

把字符串start的前缀转换成long类型,在转换中跳过start的前导空白符。如果end不为NULL,则把未转换部分的指针保存在*end中。

如果radix的值在2到36间之间,那么转换按该基数进行;如果radix为0,则基数为八进制、十进制、十六进制,以0为前导的是八进制,以0x或0X为前导的是十六进制。无论在哪种情况下,串中的字母是表示10到radix-1之间数字的字母。如果radix是16,可以加上前导0x或0X。

如果结果上溢,则依据结果的符号返回LONG_MAX或LONG_MIN,置errno为ERANGE。

unsigned long int strtoul(const char *start, char **end, int radix);

与strtol()类似,只是结果为unsigned long类型,溢出时值为ULONG_MAX。

int rand(void);

产生一个0到RAND_MAX之间的伪随机整数。RAND_MAX值至少为32767。

void srand(unsigned int seed);

设置新的伪随机数序列的种子为seed。种子的初值为1。

void *calloc(size_t num, size_t size);

为num个大小为size的对象组成的数组分配足够的内存,并返回指向所分配区域的第一个字节的指针;如果内存不足以满足要求,则返回NULL。

分配的内存区域中的所有位被初始化为0

void *malloc(size_t size);

为大小为size的对象分配足够的内存,并返回指向所分配区域的第一个字节的指针;如果内存不足以满足要求,则返回NULL。

不对分配的内存区域进行初始化。

void *realloc(void *ptr, size_t size);

将ptr指向的内存区域的大小改为size个字节。如果新分配的内存比原内存大,那么原内存的内容保持不变,增加的空间不进行初始化。如果新分配的内存比原内存小,那么新内存保持原内存区中前size字节的内容。函数返回指向新分配空间的指针。如果不能满足要求,则返回NULL,原ptr指向的内存区域保持不变。

如果ptr为NULL,则行为等价于malloc(size)。

如果size为0,则行为等价于free(ptr)。

void free(void *ptr);

释放ptr指向的内存空间,若ptr为NULL,则什么也不做。ptr必须指向先前用动态分配函数malloc、realloc或calloc分配的空间。

void abort(void);

使程序非正常终止。其功能类似于raise(SIGABRT)

void exit(int status);

使程序正常终止。atexit函数以与注册相反的顺序被调用,所有打开的文件被刷新,所有打开的流被关闭。status的值如何被返回依具体的实现而定,但用0表示正常终止,也可用值EXIT_SUCCESS和EXIT_FAILURE。

int atexit(void (*func)(void));

注册在程序正常终止时所要调用的函数func。如果成功注册,则函数返回0值,否则返回非0值。

int system(const char *str);

把字符串str传送给执行环境。如果str为NULL,那么在存在命令处理程序时,返回0值。如果str的值非NULL,则返回值与具体的实现有关。

char *getenv(const char *name);

返回与name相关的环境字符串。如果该字符串不存在,则返回NULL。其细节与具体的实现有关。

void *bsearch(const void *key, const void *base, size_t n, size_t size,

int (*compare)(const void *, const void *));

在base[0]...base[n-1]之间查找与*key匹配的项。size指出每个元素占有的字节数。函数返回一个指向匹配项的指针,若不存在匹配则返回NULL。

函数指针compare指向的函数把关键字key和数组元素比较,比较函数的形式为:

int func_name(const void *arg1, const void *arg2);

arg1是key指针,arg2是数组元素指针。

返回值必须如下:

arg1 < arg2时,返回值<0

arg1 == arg2时,返回值==0

arg1 > arg2时,返回值>0

数组base必须按升序排列(与compare函数定义的大小次序一致)。

void qsort(void *base, size_t n, size_t size,

int (*compare)(const void *, const void *));

对由n个大小为size的对象构成的数组base进行升序排序。

比较函数compare的形式如下:

int func_name(const void *arg1, const voie *arg2);

其返回值必须如下所示:

arg1 < arg2,返回值<0

arg1 == arg2,返回值==0

arg1 > arg2,返回值>0

int abs(int num);

返回int变元num的绝对值。

long labs(long int num);

返回long类型变元num的绝对值。

div_t div(int numerator, int denominator);

返回numerator/denominator的商和余数,结果分别保存在结构类型div_t的两个int成员quot和rem中。

ldiv_t div(long int numerator, long int denominator);

返回numerator/denominator的商和余数,结果分别保存在结构类型ldiv_t的两个long成员quot和rem中。

6.iomanip

dec 置基数为10相当于"%d"

hex 置基数为16相当于"%X"

oct 置基数为8相当于"%o"

setfill( 'c' )设填充字符为c

setprecision( n )设显示小数精度为n

setw( n )设域宽为n个字符

▲setw(n)用法: 通俗地讲就是预设宽度

这个控制符的意思是保证输出宽度为n。如:

cout << setw( 3 ) << 1 << setw( 3 ) << 10 << setw( 3 ) << 100 <<setw(3)<<1000<< endl;

结果为:

(空格)(空格)1(空格)101001000

(默认是右对齐)当输出长度大于3时(<<1000),setw(3)不起作用。

▲setfill(char c)用法 :就是在预设宽度中如果已存在没用完的宽度大小,则用设置的字符c填充

如 cout<<setfill(‘@‘)<<setw(5)<<255<<endl;

结果是:

@@255

▲setbase(int n) :将数字转换为 n进制.

如 cout<<setbase(8)<<setw(5)<<255<<endl;

cout<<setbase(10)<<setw(5)<<255<<endl;

cout<<setbase(16)<<255<<endl;

结果是:

(空格)(空格)377

(空格)(空格) 255

(空格)(空格) f f

▲ setprecision用法

使用setprecision(n)可控制输出流显示浮点数的数字个数。C++默认的流输出数值有效位是6。

如果setprecision(n)与setiosflags(iOS::fixed)合用,可以控制小数点右边的数字个数。setiosflags(ios::fixed)是用定点方式表示实数。

如果与setiosnags(ios::scientific)合用,可以控制指数表示法的小数位数。setiosflags(ios::scientific)是用指数方式表示实数。

setiosflags(ios::fixed)固定的浮点显示

setiosflags(ios::scientific)指数表示

setiosflags(ios::left)左对齐

setiosflags(ios::right)右对齐

setiosflags(ios::skipws)忽略前导空白

setiosflags(ios::uppercase) 16进制数大写输出

setiosflags(ios::lowercase) 16进制小写输出

setiosflags(ios::showpoint)强制显示小数点

setiosflags(ios::showpos)强制显示符号

7.numeric

accumulate(first,last,n);

求和,n为初始值;

adjacent_difference(first,last,result);

求相邻元素的差,后减前,result为差的序列在原序列开始的位置 

checked_ adjacent_difference(first,last,result);

inner_product(first1,first2,last1,last2);

将对应元素相乘并求出累计和

partial_sum(first,last,result);

求到任意位置的累计和,result为和的序列在原序列开始的位置
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 小孩发烧37.8度怎么办 坐火车没有座位怎么办 小孩坐火车饮食怎么办 飞机托运了手机怎么办 飞机随身包超重怎么办 行李超过20公斤怎么办 飞机安检有钢板怎么办 飞机上拍照片怎么办? 飞机行李超重该怎么办 无法买机票出行怎么办 机票的保险发票怎么办 行李办理托运后怎么办 飞机托运超尺寸怎么办 机票无托运行李怎么办 飞机票不含托运怎么办 登机重量超了怎么办 随身行李超重了怎么办 国际航班没带护照怎么办 派出所不开户籍怎么办 做火车没身份证怎么办 2018年怎么办户籍证明 一岁宝宝护照怎么办 户籍证明开不了怎么办 信用卡提不了额怎么办 信用卡提额诈骗怎么办 信用卡提额失败怎么办 身份证证件号错误怎么办 东西落在飞机上怎么办 乘高铁忘记带身份证怎么办 身份证丢坐火车怎么办 苏州市民a卡怎么办 集体户口户口页怎么办 网上不能买火车票怎么办 集体户口离婚时怎么办 没户口本怎么办结婚证 酒店没带身份证怎么办 住酒店拍身份证怎么办 手机取火车票要怎么办 香港酒店没登记怎么办 住宿未带身份证怎么办 长期住酒店怎么办暂住证