本文中提到的函数库有:
<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 | 判断是否为空 | |
reserve | 预留空间 | |
resize | 重新分配空间 | |
获取内容 | copy | 字符串到空间 |
c_str | 取得C风格的const char* 字符串 | |
data | 取得字符串内容地址 | |
操作 | swap | 交换函数 |
insert | 插入字符 | |
append | 追加字符 | |
push_back | 追加字符 | |
erase | 删除字符串 | |
clear | 清空字符容器中所有内容 | |
replace | 替代 | |
赋值 | assign | 和赋值操作符一样 |
查找 | find | 查找,返回基于0的索引号 |
rfind | 反向查找 | |
find_first_of | 查找包含子串中的任何字符,返回第一个位置 | |
find_first_not_of | 查找不包含子串中的任何字符,返回第一个位置 | |
find_last_of | 查找包含子串中的任何字符,返回最后一个位置 | |
find_last_not_of | 查找不包含子串中的任何字符,返回最后一个位置 | |
子串 | substr(n1,len) | 得到字符串从n1开始的长度为len的子串 |
比较 | compare | 比较字符串(支持所有的关系运算符) |
读取 | getline | 从输入流中读入一行 |
操作符 | operator[] | 取第几个元素,相当于数组 |
operator= | 赋值操作符 | |
operator+ | 字符串链接 | |
operator+= | += 操作符 | |
operator== | 判断是否相等 | |
operator!= | 判断是否不等于 | |
operator< | 判断是否小于 | |
operator>> | 从输入流中读入字符串 | |
operator<< | 字符串写入输出流 |
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 ::fabs; | |
using ::fabsf; | |
using ::fabsl; | |
反余弦 | using ::acos; |
using ::acosf; | |
using ::acosl; | |
反正弦 | using ::asin; |
using ::asinf; | |
using ::asinl; | |
正切 | using ::tan; |
using ::tanf; | |
using ::tanl; | |
双曲正切 | using ::tanh; |
using ::tanhf; | |
using ::tanhl; | |
反正切 | using ::atan; |
using ::atanf; | |
using ::atanl; | |
y/x的反正切 | using ::atan2; |
using ::atan2f; | |
using ::atan2l; | |
上取整 | using ::ceil; |
using ::ceilf; | |
using ::ceill; | |
余弦 | using ::cos; |
using ::cosf; | |
using ::cosl; | |
双曲余弦 | using ::cosh; |
using ::coshf; | |
using ::coshl; | |
正弦 | using ::sin; |
using ::sinf; | |
using ::sinl; | |
双曲正弦 | using ::sinh; |
using ::sinhf; | |
using ::sinhl; | |
指数值 | using ::exp; |
using ::expf; | |
using ::expl; | |
下取整 | using ::floor; |
using ::floorf; | |
using ::floorl; | |
求余 | using ::fmod; |
using ::fmodf; | |
using ::fmodl; | |
返回value=x*2n中x的值,n存贮在eptr中 | using ::frexp; |
using ::frexpf; | |
using ::frexpl; | |
返回value*2exp的值 | using ::ldexp; |
using ::ldexpf; | |
using ::ldexpl; | |
对数 | using ::log; |
using ::logf; | |
using ::logl; | |
using ::log10; | |
using ::log10f; | |
using ::log10l; | |
将双精度数value分解成尾数和阶 | using ::modf; |
using ::modff; | |
using ::modfl; | |
计算幂 | using ::pow; |
using ::powf; | |
using ::powl; | |
开方 | using ::sqrt; |
using ::sqrtf; | |
using ::sqrtl; |
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为和的序列在原序列开始的位置 |