50.10greater() param1>param2
50.11less_equal() param1<=param2
50.12greater_equal() param1>=param2
50.13logical_not() !param
50.14logical_and() param1&¶m2
50.15logical_or() param1||param2
51.函数配接器(Function Adapters)是指能够将仿函数和另一个仿函数(或某个值,或某个一般函数)结合起来的仿函数。其亦包含在头文件中。常用如下:
51.1 bind1st(op,value) op(value,param)
51.2 bind2nd(op,value) op(value,param)
51.3 not1(op) !op(param)
51.4not2(op) !op(param1,param2)
52.成员函数配接器(member functions),即针对群集内的每个元素调用其成员函数。常用如下:
52.1 mem_fun_ref(op) 调用op,那是某对象的一个const成员函数
52.2 mem_fun(op) 调用op,那是某对象指针的一个const成员函数
53.针对一般函数的函数配接器为:prt_fun(op) op(param)/op(param1,param2)
54.为了让自己定义的仿函数能够和函数配接器搭配使用,必须提供一些型别成员来反映其参数和返回值的型别。
55. 算法是被设计用来处理一个或多个迭代器区间的数据的工具,且一般采用覆盖模式包含着头文件
或中。常用的算法种类包括以下几种:
55.1 非变动性算法(nonmodifying algorithms)既不改变元素次序,也不改动元素值的算法,可作用于所有标准容器身上。常用操作如下:
55.1.1 for_each() 对每个元素执行某操作
55.1.2 count() 返回元素个数
55.1.3 count_if() 返回满足某一准则的元素个数
55.1.4 min_element() 返回最小值元素
55.1.5 max_element() 返回最大值元素
55.1.6 find() 搜索等于某值的第一个元素
55.1.7 find_if() 搜索满足某个准则的第一个元素
55.1.8 search_n() 搜索具有某特性的第一段n个连续元素
55.1.9 search() 搜索某个子区间第一次出现位置 string is find()
55.1.10 find_end() 搜索某个子区间最后一次出现位置 string is rfind()
55.1.11 find_first_of() 搜索等于某数个值之一的第一个元素
55.1.12 adjacent_find() 搜索连续连个相等的元素
55.1.13 equal() 判断两区间是否相等
55.1.14 mismatch() 返回两个序列的各组对应元素中,第一对不相等元素
55.1.15l lexicographical_compart() 判断某一序列中字典顺序下是否小于另一序列
55.2 变动性算法 (modifying algorithms)是指要不直接改变元素值,或者在复制到另一区间的过程中改变元素值。常用的操作如下:
55.2.1 for_each() 针对每个元素执行某项操作
55.2.2 copy() 从第一个元素开始,复制某段区间
55.2.3 copy_backward() 从最后一个元素开始,复制某段区间
55.2.4 transform() 变动(并复制)元素,将两个区间的元素合并
55.2.5 merge() 合并两个区间
55.2.6 awap_ranges() 交换两区间内的元素
55.2.7 fill() 以给定值替换每一个元素
55.2.8 fill_n() 以给定值替换n个元素
55.2.9 generate() 以某项操作的结果替换每一个元素
55.2.10 generate_n() 以某项操作的结果替换n个元素
55.2.11 replace() 将具有某特定值的元素替换为另一个值
55.2.12 replace_if() 将符合某准则的元素替换为另一个值
55.2.13 replace_copy() 复制整个区间,同时并将具有某特定值的元素替换为另一个值
55.2.14 replace_copy_if() 复制整个区间,同时并将符合某准则的元素替换为另一个值
55.3 移除性算法 (removing algorithms)可以移除某区间内的元素,也可以在复制过程中执行移除动作,但只是逻辑上的移除。常用操作如下:
55.3.1 remove() 将等于某特定值的元素全部移除
55.3.2 remove_if() 将满足某准则的元素全部移除
55.3.3 remove_copy() 将不等于某特定值的元素全部复制到它处
55.3.4 remove_copy_if() 将不满足某准则的元素全部复制到它处
55.3.5 unique(0 移除毗邻的重复元素
55.3.6 unique_copy() 移除毗邻的重复元素并复制到它处
55.4 变序性算法 (mutating algorithms)指通过元素值的赋值和交换,改变元素顺序(但不改变元素值).常用算法如下:
55.4.1 reverse() 将元素的次序逆转
55.4.2 reverse_copy() 复制的同时,逆转元素顺序
55.4.3 rotate() 旋转元素次序
55.4.4 rotate_copy() 复制的同时,旋转元素次序
55.4.5 next_permutation() 得到元素下一个排列次序
55.4.6 prev_permutation() 得到元素的上一个排列次序
55.4.7 random_shuffle() 将元素次序随机打乱
55.4.8 partition() 改变元素次序,使符合某准则者移到前面
55.4.9 stable_partition() 与partition()类似,但保持符合准则与不符合准则之各个元素之间的相对位置
55.5 排序算法 (sorting algorithms)是一种特殊的变序性算法,但比一般的变序性算法复杂,花费更多时间。常用操作如下:
55.5.1 sort() 对所有元素排序
55.5.2 stable_sort() 对所有元素排序,并保持相等元素间的相对次序
55.5.3 partial_sort() 排序,直到前n个元素就位
55.5.4 partial_sort_copy() 排序,直到前n个元素就位,结果复制于它处
55.5.5 nth_element() 根据第n个位置进行排序
55.5.6 partition() 改变元素次序,使符合某准则的元素放在前面
55.5.7 stable_partition() 与partition()相同,但保持符合准则和不符合准则的各个元素之间的相对位置
55.5.8 make_heap() 将一个区间转换成一个heap
55.5.9 push_heap() 将元素加入一个heap
55.5.10pop_heap() 从heap移除一个元素
55.5.11sort_heap() 对heap进行排序,(执行后就不在是个heap了)
55.6 已序区间算法(sorted range algorithms)是指所作用的区间在某种排序准则下已序。常用操作如下:
55.6.1 binary_search() 判断某区间内是否包含某个元素
55.6.2 includes() 判断某区间内的每一个元素是否都涵盖于另以区间中
55.6.3 lower_bound() 搜寻第一个大于等于给定值的元素
55.6.4 upper_bound() 搜寻第一个大于给定值的元素
55.6.5 equal_range(0 返回等于给定值的所有元素构成的区间
55.6.6 merge() 将两个区间的元素合并
55.6.7 set_union() 求两个区间的并集
55.6.8 set_intersection() 求两个区间的交集
55.6.9 set_difference() 求位于第一区间但不位于第二区间的所有元素,形成一个已序区间
55.6.10 set_symmetric_difference() 找出只出现于两区间之一的所有元素,形成一个已序区间
55.6.11 inplace_merge() 将两个连续的已序区间合并
55.7 数值算法 (numeric algorithms) 即以不同方式组合数值元素的算法。常用函数如下:
55.7.1 accumulate() 组合所有元素(求总和,求乘积)
55.7.2 inner_product() 组合两区间内的所有元素
55.7.3 adjacent_difference() 将每个元素和其前一元素组合
55.7.4 partial_sum() 将每个元素和其先前的所有元素组合
56.Heap算法,就排序而言,heap是一种特别的元素组织方式,应用于heap排序法。即heap可被视为一个以序列式群集实作而成的而叉树,具有以下两大性质:
第一,第一元素总是最大;第二,总是能够在对数时间内增加或移除一个元素。
57.Stacks(堆栈)可以做为STL的一个特殊容器,包含于头文件中。其操作如下:
57.1 push() 会将一个元素置入stack内
57.2 top() 会返回stack内的下一个元素
57.3 pop() 会从stack中移除元素
58.Queues(队列)可以做为STL的一个特殊容器,包含于头文件中。其操作如下:
58.1 push() 会将一个元素置入queue内
58.2 front() 会返回queue内的下一个元素
58.3 back() 会返回queue内的最后一个元素(也就是第一个被插入的元素)
58.4 pop() 会从queue中移除一个元素
59.优先队列(Priority Queues),与queue非常相近,但在top/pop操作“下一个元素”时操作的为优先级最高的元素,包含于头文件中。
59.1 push() 会将一个元素置入priority queue内
59.2 top() 会返回priority queue内的下一个元素
59.3 pop() 会从priority queue中移除一个元素
60.Bitsets制造出一个内含位(bits)或布尔(boolean)值且大小固定的array.当需要管理各式标志(flags),并以标志的任意组合来表现变量时,就可运用之,头文件.
60.1 size() 返回位的个数
60.2 count() 返回“位值为1”的位个数
60.3 any() 判断是否有任何位被设立数值为1
60.4 none() 判断是否没有任何一个位被设立,亦即所有的位皆为0
60.5 test(size_t idx) 判断idx位置上的位是否被设立为1
60.6 operator==(const bitset&bits) 判断*this 和bits的所有位是否都相等
60.7 operator!===(const bitset&bits) 判断*this 和bits之中是否有些位不相等
60.8 set() 将所有的位设为true
60.9 set(size_t idx) 将位置idx上的位设为true
60.10 set(size_t idx,int value) 根据value上的值设定idx位置的位值
60.11 reset() 将所有位设为false
60.12 reset(size_t idx) 将位置idx上的位设为false
60.13 flip() 反转所有位
60.14 flip(size_t idx) 反转idx位置上的位
60.15 operator^=(const bitset&bits) 对每个位逐一进行exclusive-or运算
60.16 operator!=(const bitset&bits) 位逐一进行or运算
60.17 operator&=(const bitset&bits) 位逐一进行and运算
60.18 operator<<=(size_t num) 将所有位向左移动num个位置
60.19 operator>>=(size_t num) 将所有位向右移动num个位置
60.20 operator[] (size_t idx) 返回idx位置上的位值
60.21 operator ~() 产生一个新的bitset并返回;以*this的位反转值作为初值
60.22 operator <<(size_t num) 产生一个新的bitset并返回;以*this的位向左移动num个位置作为初值
60.23 operator >>(size_t num) 产生一个新的bitset并返回;以*this的位向右移动num个位置作为初值
60.24 operator&(const bitset&bits1,const bitset&bits2) 对bits1和bits2两者进行各位逐一and运算并返回结果
60.25 operator | (const bitset&bits1,const bitset&bits2) 对bits1和bits2两者进行各位逐一or运算并返回结果
60.26 operator^(const bitset&bits1,const bitset&bits2) 对bits1和bits2两者进行各位逐一exclusive or运算并返回结果
60.27 to_ulong() 返回bitset所有位所代表的整数
60.28 to_string() 返回一个string,以字符串形式表现该bitset的二进制值
60.29 operator >> (istream&strm,bitset&bits) 将一个包含0和1的字符序列转换为对应位,读入bits
60.30 operator << (istream&strm,const bitset&bits) 将bits的二进制形式转换为字符串,成为一个包含0和1的序列
61.C++中string指的是某个字符串型别的对象。而一般的字符串(即char*或const char*),则可以用c-string指代,但并无固定规则。
62.头文件定义了所有的字符串型别和函数。而模板basic_string<>包含string和wstring两个型别。
62.1字符串的各种操作函数如下:
62.1.1 构造函数(constructors) 产生或复制字符串
62.1.2 析构函数(destructors) 销毁字符串
62.1.3 =,assign() 赋以新值
62.1.4 swap() 交换两个字符串的内容
62.1.5 +=,append(),push_back() 添加字符
62.1.6 insert() 插入字符
62.1.7 erase() 删除字符
62.1.8 clear() 移除全部字符(使之为空)
62.1.9 resize() 改变字符数量(在尾端删除或添加字符)
62.1.10 replace() 替换字符
62.1.11 + 串联字符串
62.1.12 ==,!=,<,<=,>,>=,compare() 比较字符串内容
62.1.13 size(),length() 返回字符数量
62.1.14 max_size() 返回字符的最大可能个数
62.1.15 empty() 判断字符串是否为空
62.1.16 capacity() 返回重新分配之前的字符容量
62.1.17 reserve() 保留一定量内存以容纳一定数量的字符
62.1.18 [],at() 存取单一字符
62.1.19 >>,getline() 从stream中读取某值
62.1.20 << 将某值写入stream
62.1.21 copy() 将内容复制为一个c-string
62.1.22 c_str() 将内容以c-string形式返回
62.1.23 data() 将内容以字符数组(character array)形式返回
62.1.24 substr() 返回某个子字符串(substring)
62.1.25 搜寻函数(find functions) 搜寻某个子字符串或字符
62.1.26 begin(),end() 提供正常的(正向)迭代器支持
62.1.27 rbegin(),rend() 提供逆向迭代器支持
62.1.28 ge_allocator() 返回配置器(allocator)
62.2 字符串的参数规格
62.2.1 const string & str 整个str字符串
62.2.2 const string & str,size_type idx,size_type num 大部分情况下是指字符串str中的以idx 开始的num个字符
62.2.3 const char* cstr 整个c-string cstr
62.2.4 const char* chars,size_type len 字符数组chars中的len个字符
62.2.5 char c 字符c
62.2.6 size_type num,char c num个字符c
62.2.7 iterator beg,iterator end 区间[beg;end]内所有字符
62.3字符串的构造函数与析构函数
62.3.1 string s 生产一个空字符串s
62.3.2 string s(str) copy构造函数,生产字符串str的一个复制品
62.3.3 string s(str,stridx) 将字符串str内始于位置stridx的部分,当做字符串s的初值
62.3.4 string s(str,stridx,strlen) 将字符串str内始于位置stridx且长度顶多strlen的部分,当做字符串s的初值
62.3.5 string s(cstr) 以c-string cstr作为字符串s的初值
62.3.6 string s (chars,chars_len) 以c-string cstr的前chars_len个字符作为字符串s的初值
62.3.7 string s (num,c) 生成一个字符串,包含num个c字符
62.3.8 string s (beg,end) 以区间[beg;end]内的字符作为字符串s的初值
62.3.9 s,~string() 销毁所有字符,释放内存
62.4字符串搜寻函数
62.4.1 find() 搜寻第一个与value相等的字符
62.4.2 rfind() 搜寻最后一个与value相等的字符(逆向搜寻)
62.4.3 find_first_of() 搜寻第一个与value中的某值相等的字符
62.4.4 find_last_of() 搜寻最后一个与value中的某值相等的字符
62.4.5 find_first_not_of() 搜寻第一个与value中任何值都不相等的字符
62.4.6 find_last_not_of() 搜寻最后一个与value中任何值都不相等的字符
63.字符串中的元素读取时,下标『』并不检查是否有效,单at()会检查,若无效则抛出异常。
64.在字符串操作中,如果搜寻函数失败,就会返回string::npos,由于npos有固定的型别,故在比较时需要对目标子串进行型别定义,即定义为string::size_type.
65.字符串迭代器是随机存取迭代器,其常用的迭代器操作函数如下(注意end的半开特性):
65.1 s.begin() 返回一个随机存取迭代器,指向第一个字符
65.2 s.end() 返回一个随机存取迭代器,指向最后一个字符的下一个位置
65.3 s.rbegin() 返回一个逆向迭代器,指向倒数第一个字符,亦即最后一个字符
65.4 s.rend() 返回一个逆向迭代器,指向倒数最后一个字符的下一个位置,亦即第一个字符的前一个位置
65.5 string s(beg,end) 以区间[beg;end]内的所有字符作为string s的初值
65.6 s.append(beg,end) 将区间[beg;end]内的所有字符添加于s尾部
65.7 s.assign(beg,end) 将区间[beg;end]内的所有字符赋值给s
65.8 s.insert(pos,c) 在迭代器pos所指之处插入字符c,并返回新字符的迭代器 位置
65.9 s.insert(pos,num,c) 在迭代器pos所指之处插入num字符c,并返回新字符的迭代器 位置
65.10 s.insert(pos,beg,end) 在迭代器pos所指之处插入区间[beg;end]内的所有字符
65.11 s.erase(pos) 删除迭代器pos所指字符,并返回下一个字符位置
65.12 s.erase(beg,end) 删除区间[beg;end]内的所有字符,并返回下一个字符的下一个位置
65.13 s.replace(beg,end,str) 以string str内的字符替代[beg;end]区间内的所有字符
65.14 s.replace(beg,end,cstr) 以c-string cstr内的字符替代[beg;end]区间内的所有字符
65.15 s.replace(beg,end,cstr,len) 以字符数组str的前len个字符替代 [beg;end]区间内的所有字符
65.16 s.replace(beg,end,num,c) 以num个字符c替代 [beg;end]区间内的所有字符
65.17 s.replace(beg,end,newbeg,newend) 以[newbeg;newend]区间内的所有字符替代 [beg;end]区间内的所有字符
66. C++中头文件中包含复数及其相关的操作。其构造函数及赋值操作如下:
66.1 complex c 产生一个复数,实部和虚部都为零
66.2 complex c(1.3) 产生一个复数,实部为1.3,虚部为0
66.3 complex c(1.3,4.2) 产生一个复数,实部为1.3,虚部为4.2
66.4 complex c1(c2) 产生一个复数,是c2的一个副本
66.5 polar(4,2) 产生一个极坐标表示法的临时复数,模为4.2,相位角为0.
66.6 polar(4.2,0.75) 产生一个极坐标表示法的临时复数,模为4.2,相位角为0.75
66.7 conj(c) 产生一个临时复数,是c的共轭复数.
66.8 c1=c2 将c2的值赋值给c1
66.9 c1+=c2 将c2的值加入c1
66.10 c1-=c2 将c1的值减去c2
66.11 c1*=c2 将c1的值乘以c2
66.12 c1/=c2 将c1的值除以c2
66.13 c.real() 返回实部值--成员函数
66.14 real(c) 返回实部值--全局函数
66.15 c.imag() 返回虚部值--成员函数
66.16 imag(c) 返回虚部值--全局函数
66.17 abs(c) 返回绝对值
66.18 norm(c) 返回绝对值平方
66.19 arg(c) 返回极坐标相位角
67.复数的超越函数
67.1 pow(c,3) 计算c的3次幂
67.2 pow(c,1.7) 计算c的1.7次幂
67.3 pow(c1,c2) 计算c1的 c2次幂
67.4 pow(1.7,c) 计算1.7的c次幂
67.5 exp(c) 计算以e为底,c为指数的幂次方
67.6 sqrt(c) 计算c的平方根
67.7 log(c) 计算c的自然对数
67.8 log10(c) 计算以10为底的c的对数
67.9 sin(c) 计算c的正弦值
67.10 cos(c) 计算c的余弦值
67.11 tan(c) 计算c的正切值
67.12 sinh(c) 计算c的双曲正弦值
67.13 cosh(c) 计算c的双曲余弦值
67.14 tanh(c) 计算c的双曲正切值
68.Valarrys是个一维数组,元素从零开始计数,它可以针对一个或多个数值数组的全体或部分进行数值处理。其包含于头文件中。操作如下:
68.1 valarray::valarray() 缺省构造函数,产生一个空的valarray
68.2 valarray::valarray(size_t num) 产生一个包含num个元素的valarray 初值为0
68.3 valarray::valarray(const T&value,size_t num) 产生一个包含num个元素的valarray 初值为value
68.4 valarray::valarray(const T*array,size_t num) 产生一个包含num个元素的valarray 初值为array中的对应元素
68.5 valarray::valarray(const valarray&va) copy构造函数,产生valarray va的一个复制品
68.6 valarray::~valarray() 析构函数,销毁所有元素,释放内存
68.7 valarray::valarray()
68.8 valarray&valarray::operator=(const valarray&va) 赋值,将valarray va的元素赋值给*this
68.9 valarray&valarray::operator=(const T&value) 赋值,将value的值赋值给*this
68.10 size(),resize(),min(),max(),sum(),shift(),cshift(),apply(T op(T)),[](size_t idx), unary-op(), binary-op(),超越类函数
69. Valarrays的子集类别:Slices(切割),General slices(一般化切割),Masked subsets(屏蔽式子集),Indirect subsets(间接式子集).
70.头文件,包含了全局性数值函数:
70.1的函数类别:
70.1.1 pow() 求幂函数
70.1.2 exp() 指数函数
70.1.3 sqrt() 平方根
70.1.4 log() 自然对数
70.1.5 log10() 以10为底的对数
70.1.6 sin() 正弦函数
70.1.7 cos() 余弦函数
70.1.8 tan() 正切函数
70.1.9 sinh() 双曲正弦函数
70.1.10 cosh() 双曲余弦函数
70.1.11 tanh() 双曲正切函数
70.1.12 asin() 反正弦函数
70.1.13 acos() 反余弦函数
70.1.14 atan() 反正切函数
70.1.15 atan2() 商的反正切函数
70.1.16 ceil() 大于某个浮点数的最小整数
70.1.17 floor() 小于某个浮点数的最大整数
70.1.18 fabs() 浮点数的绝对值
70.1.19 fmod() 浮点数相除的余数
70.1.20 frexp() 将一个浮点数转换成小数部分和整数部分
70.1.21 ldexp() 将某个浮点数乘以2的某个整数幂次方
70.1.22 modf() 将浮点数分离为一个带正负号的整数和一个分数
70.2 头文件的函数类别:
70.2.1 abs() 求某个int的绝对值
70.2.2 labs() 求某个long的绝对值
70.2.3 div() 求int相除的商和余数
70.2.4 ldiv() 求long相除的商和余数
70.2.5 srand() 随机数产生器(种下新的随机数种子)
70.2.6 rand() 随机数产生器(取得一个随机数)
71.所谓stream就是一条数据流,是由某个类别定义出来的具有特定性质的对象。其全局对象包括cin,cout,cerr,clog,wcin,wcout,wcerr,wclog.
72.操控器是专门用来操控stream的对象,常常只会改变输入或格式输出的解释方式。主要类别如下:
72.1 endl 输出‘\n'并刷新output缓冲区
72.2 ends 输出‘\0'
72.3 flush 刷新output缓冲区
72.4 ws 读入并忽略空格
73.stream buffers提供读写时所使用的字符缓冲区,并形成对外部表述的一种抽象概念。
74.stream的常用头文件包括,,,,.
75.streams定义了一些型别为iostate的常数,用以反映stream的状态,包括goodbit,eofbit,failbit,badbit.处理状态的成员函数如下:
75.1 good() 若stream正常无误,返回true(表示goodbit设立)
75.2 eof() 若遭遇end-of-file,返回true(表示eofbit设立)
75.3 fail() 若发生错误,返回true(表示failbit或badbit设立)
75.4 bad() 若发生毁灭性错误,返回true(表示badbit设立)
75.5 rdstate() 返回当前已设立的所有标志
75.6 clear() 清除所有标志
75.7 clear(state) 清除所有标志后,设立state标志
75.8 setstate(state) 加设state标志
75.9 void*() stream是否未出错(相当于!fail())
75.10 !() stream 是否已出错(相当于fail())
75.11 exceptions(flags) 设定会引发异常的标志
75.12 exceptions() 返回引发异常的标志
76.输入用的成员函数
76.1 get(s,num) 不包括new line 或 EOF,最多num-1个字符,需要添加结束符号,返回istream
76.2 get(s,num,t) 不包括t 或 EOF,最多num-1个字符,需要添加结束符号,返回istream
76.3 getline(s,num) 包括new line 或 EOF,最多num-1个字符,需要添加结束符号,返回istream
76.4 getline(s,num,t) 包括t 或 EOF,最多num-1个字符,需要添加结束符号,返回istream
76.5 read(s,num) EOF,最多num个字符,不需要添加结束符号,返回istream
76.6 readsome(s,num) EOF(end-of-file),最多num个字符,不需要添加结束符号,返回count
77.输出用的成员函数
77.1 put()
77.2 write()
78.g格式标志(Form flags)可以定义诸如数字精度,充填字符,数字进制等格式。访问格式标志的成员函数包括:
78.1 setf(flags) 添设格式标志flags,返回所有标志的原本状态
78.2 setf(flags,mask) 添设格式标志flags(配合掩码mask),返回所有标志的原本状态
78.3 unsetf(flags) 清除flags
78.4 flags() 返回所有已设立的格式标志
78.5 flags(flags) 将flags设为新的格式标志,返回所有标志的原本状态
78.6 copyfmt(stream) 从stream中复制所有格式定义
79.用于存取格式标志的两个操控器
79.1 setiosflags(flags) 将flags设为格式标志(调用相应stream的setf(flags))
79.2 resetiosflags(mask) 清除mask所标识的一组标志(调用相应stream的setf(0,mask))
79.3 boolalpha /noboolalpha
80.其他函数类操作
80.1 width() 返回当前的字段宽度
80.2 width(val) 设立val为当前字段宽度,并返回先前的字段宽度
80.3 fill() 返回当前的充填字符
80.4 fill(c) 定义c为当前充填字符,并返回先前的充填字符
80.5 掩码及标志adjustfield left/right/internal/None 靠左对齐
80.6 skipws 调用>>读取数值时,自动跳过起始空格
80.7 nounitbuf 每次输出后,清空output缓冲区