免费网站空间哪个好,国内网站建设推荐,信息技术会考做网站,正阳县网站建设STL迭代器及总结解释迭代器是一种对象#xff0c;它能够用来遍历STL容器中的部分或全部元素#xff0c;每个迭代器对象代表容器中的确定的地址。迭代器修改了常规指针的接口#xff0c;所谓迭代器是一种概念上的抽象#xff1a;那些行为上象迭代器的东西都可以叫做迭代器。… STL迭代器及总结解释迭代器是一种对象它能够用来遍历STL容器中的部分或全部元素每个迭代器对象代表容器中的确定的地址。迭代器修改了常规指针的接口所谓迭代器是一种概念上的抽象那些行为上象迭代器的东西都可以叫做迭代器。然而迭代器有很多不同的能力它可以把抽象容器和通用算法有机的统一起来。迭代器提供一些基本操作符*、、、、。这些操作和C/C“操作array元素”时的指针接口一致。不同之处在于迭代器是个所谓的smart pointers具有遍历复杂数据结构的能力。其下层运行机制取决于其所遍历的数据结构。因此每一种容器型别都必须提供自己的迭代器。事实上每一种容器都将其迭代器以嵌套的方式定义于内部。因此各种迭代器的接口相同型别却不同。这直接导出了泛型程序设计的概念所有操作行为都使用相同接口虽然它们的型别不同。功能特点迭代器使开发人员不必整个实现类接口。只需提供一个迭代器即可遍历类中的数据结构可被用来访问一个容器类的所包函的全部元素其行为像一个指针但是只可被进行增加()或减少(--)操作。举一个例子你可用一个迭代器来实现对vector容器中所含元素的遍历。如下代码对vector容器对象生成和使用了迭代器 1 vectorint the_vector; 2 vectorint::iterator the_iterator; 3 for( int i0; i 10; i ) 4 the_vector.push_back(i); 5 int total 0; 6 the_iterator the_vector.begin(); 7 while( the_iterator ! the_vector.end() ) 8 { 9 total *the_iterator; 10 the_iterator; 11 } 12 cout Total total endl;提示通过对一个迭代器的解引用操作*可以访问到容器所包含的元素。C标准库总结 容器 序列 vectorvectorlistlistdequedeque序列适配器 stack:top,push,popstackqueue:front,back,push,popqueuepriority_queue:top,push,popqueue关联容器 mapmapmultimapmapsetsetmultisetset拟容器 stringstringvalarrayvalarraybitsetbitset算法http://www.cplusplus.com/reference/algorithm/STL Algorithms 详细说明
。非修改性序列操作
algorithmfor_each()对序列中每个元素执行操作find()在序列中找某个值的第一个出现find_if()在序列中找符合某谓词的第一个元素find_first_of()在序列中找另一序列里的值adjust_find()找出相邻的一对值count()在序列中统计某个值出现的次数count_if()在序列中统计与某谓词匹配的次数mismatch()找使两序列相异的第一个元素equal()如果两个序列对应元素都相同则为真search()找出一序列作为子序列的第一个出现位置find_end()找出一序列作为子序列的最后一个出现位置search_n()找出一序列作为子序列的第n个出现位置修改性的序列操作
algorithmtransform()将操作应用于序列中的每个元素copy()从序列的第一个元素起进行复制copy_backward()从序列的最后元素起进行复制swap()交换两个元素iter_swap()交换由迭代器所指的两个元素swap_ranges()交换两个序列中的元素replace()用一个给定值替换一些元素replace_if()替换满足谓词的一些元素replace_copy()复制序列时用一个给定值替换元素replace_copy_if()复制序列时替换满足谓词的元素fill()用一个给定值取代所有元素fill_n()用一个给定值取代前n个元素generate()用一个操作的结果取代所有元素generate_n()用一个操作的结果取代前n个元素remove()删除具有给定值的元素remove_if()删除满足谓词的元素remove_copy()复制序列时删除给定值的元素remove_copy_if()复制序列时删除满足谓词的元素unique()删除相邻的重复元素unique_copy()复制序列时删除相邻的重复元素reexample()反转元素的次序reexample_copy()复制序列时反转元素的次序rotate()循环移动元素rotate_copy()复制序列时循环移动元素random_shuffle()采用均匀分布随机移动元素序列排序
algorithmsort()以很好的平均次序排序stable_sort()排序且维持相同元素原有的顺序partial_sort()将序列的前一部分排好序partial_sort_copy()复制的同时将序列的前一部分排好序nth_element()将第n个元素放到它的正确位置lower_bound()找到某个值的第一个出现upper_bound()找到大于某个值的第一个出现equal_range()找出具有给定值的一个子序列binary_search()在排好序的序列中确定给定元素是否存在merge()归并两个排好序的序列inplace_merge()归并两个接续的排好序的序列partition()将满足某谓词的元素都放到前面stable_partition()将满足某谓词的元素都放到前面且维持原顺序集合算法
algorithminclude()如果一个序列是另一个的子序列则为真set_union()构造一个已排序的并集set_intersection()构造一个已排序的交集set_difference()构造一个已排序序列包含在第一个序列但不在第二个序列的元素set_symmetric_difference()构造一个已排序序列包括所有只在两个序列之一中的元素堆操作
algorithmmake_heap()将序列高速得能够作为堆使用push_heap()向堆中加入一个元素pop_heap()从堆中去除元素sort_heap()对堆排序最大和最小
algorithmmin()两个值中较小的max()两个值中较大的min_element()序列中的最小元素max_element()序列中的最大元素lexicographic_compare()两个序列中按字典序的第一个在前排列
algorithmnext_permutation()按字典序的下一个排列prev_permutation()按字典序的前一个排列通用数值算法
numericaccumulate()积累在一个序列中运算的结果(向量的元素求各的推广)inner_product()积累在两个序列中运算的结果(内积)partial_sum()通过在序列上的运算产生序列(增量变化)adjacent_difference()通过在序列上的运算产生序列(与partial_sum相反)C风格算法
cstdlibqsort()快速排序元素不能有用户定义的构造拷贝赋值和析构函数bsearch()二分法查找元素不能有用户定义的构造拷贝赋值和析构函数函数对象 基类templateclass Arg, class Res struct unary_functiontemplateclass Arg, class Arg2, class Res struct binary_function谓词
返回bool的函数对象。functionalequal_to二元arg1 arg2not_equal_to二元arg1 ! arg2greater二元arg1 arg2less二元arg1 arg2greater_equal二元arg1 arg2less_equal二元arg1 arg2logical_and二元arg1 arg2logical_or二元arg1 || arg2logical_not一元!arg算术函数对象
functionalplus二元arg1 arg2minus二元arg1 - arg2multiplies二元arg1 * arg2divides二元arg1 / arg2modulus二元arg1 % arg2negate一元-arg约束器适配器和否定器
functionalbind2nd(y)binder2nd以y作为第二个参数调用二元函数bind1st(x)binder1st以x作为第一个参数调用二元函数mem_fun()mem_fun_t通过指针调用0元成员函数mem_fun1_t通过指针调用一元成员函数const_mem_fun_t通过指针调用0元const成员函数const_mem_fun1_t通过指针调用一元const成员函数mem_fun_ref()mem_fun_ref_t通过引用调用0元成员函数mem_fun1_ref_t通过引用调用一元成员函数const_mem_fun_ref_t通过引用调用0元const成员函数const_mem_fun1_ref_t通过引用调用一元const成员函数ptr_fun()pointer_to_unary_function调用一元函数指针ptr_fun()pointer_to_binary_function调用二元函数指针not1()unary_negate否定一元谓词not2()binary_negate否定二元谓词迭代器 分类Output: *p , Input: *p , - , , , !Forward: *p , *p , - , , , !Bidirectional: *p , *p - , [] , , -- , , !Random: , - , *p , *p - , [] , , -- , , - , , ! , , , , 插入器 templateclass Cont back_insert_iteratorCont back_inserter(Cont c);templateclass Cont front_insert_iteratorCont front_inserter(Cont c);templateclass Cont, class Out insert_iteratorCont back_inserter(Cont c, Out p);反向迭代器 reexample_iteratorrbegin(), rend()流迭代器 ostream_iterator用于向ostream写入istream_iterator用于向istream读出ostreambuf_iterator用于向流缓冲区写入istreambuf_iterator用于向流缓冲区读出分配器
memorytemplateclass T class std::allocator数值 数值的限制
limitsnumeric_limitsclimitsCHAR_BITINT_MAX...cfloatDBL_MIN_EXPFLT_RADIXLDBL_MAX...标准数学函数
cmathdouble abs(double)绝对值(不在C中)同fabs()double fabs(double)绝对值double ceil(double d)不小于d的最小整数double floor(double d)不大于d的最大整数double sqrt(double d)d在平方根d必须非负double pow(double d, double e)d的e次幂double pow(double d, int i)d的i次幂double cos(double)余弦double sin(double)正弦double tan(double)正切double acos(double)反余弦double asin(double)反正弦double atan(double)反正切double atan2(double x,double y) //atan(x/y)double sinh(double)双曲正弦double cosh(double)双曲余弦double tanh(double)双曲正切double exp(double)指数以e为底double log(double d)自动对数(以e为底),d必须大于0double log10(double d)10底对数d必须大于0double modf(double d,double*p)返回d的小数部分整数部分存入*pdouble frexp(double d, int* p)找出[0.5,1)中的x,y,使dx*pow(2,y),返回x并将y存入*pdouble fmod(double d,double m)浮点数余数符号与d相同double ldexp(double d, int i)d*pow(2,i)cstdlibint abs(int)绝对值long abs(long)绝对值(不在C中)long labs(long)绝对值struct div_t { implementation_defined quot, rem; }struct ldiv_t { implementation_defined quot, rem; }div_t div(int n, int d)用d除n返回(商余数)ldiv_t div(long n, long d)用d除n返回(商余数)(不在C中)ldiv_t ldiv(long n, long d)用d除n返回(商余数)向量算术
valarrayvalarray复数算术
complextemplateclass T class std::complex;