cb35a_c++_STL_算法_for_each】的更多相关文章

cb35a_c++_STL_算法_for_each for_each(b,e,p)使用for_each()算法遍历数据使用for_each()和函数对象修改数据使用for_each()的返回值 //转换函数operator double() //参考:https://www.cnblogs.com/txwtech/p/12115391.html //static_cast<double>强制类型转换: MeanValue mv=for_each(ivec.begin(), ivec.end()…
cb51a_c++_STL_算法_根据第n个元素排序nth_elementnth_element(b,n,e),比如最大的5个数排序,或者最小的几个数nth_element(b,n,e,p)对比:partition()算法,分区算法 error C2675: 一元“++”:“TT88”不定义该运算符或到预定义运算符可接收类型的转换for (TT88::iterator iter = ideq.begin(); iter != ideq.end(); ++ideq),写错了,应该是++iter /…
cb50a_c++_STL_算法_局部排序partial_sort partial_sort(b,se,e)排序一部分,begin,source end,endcout << "部分排序,开头的5个数排序" << endl;partial_sort(ideq.begin(), ideq.begin() + 5, ideq.end()); 需要注意的是,不能保持未排序元素的原始顺序.在执行 partial_sort() 后后面元素的顺序是不确定的,这取决于具体的实…
cb49a_c++_STL_算法_对所有元素排序_sort_stable_sort sort(b,e) sort(b,e,p) stable_sort(b,e) stable_sort(b,e,p) 注意: 不适用于list容器,list有成员函数sort(); cb49a_c++_STL_算法_对所有元素排序_sort_stable_sort sort(b,e) sort(b,e,p) stable_sort(b,e) //stirng,按字符个数排序.能够保证位置间前面一致.比如 22 33…
cb48a_c++_STL_算法_重排和分区random_shuffle_stable_partition random_shuffle()//重排,随机重排,打乱顺序 partition()分区,把符合规则的分成两个区域,比如奇数放一边,偶数放一边.默认之间的位置会变化 stable_partition(),稳定的分区,分区后,默认之间的位置不会变化, 比如:2,3,5,6,分区后,2依然在6的前面.3依然在5的前面 STL算法--变序性算法 reverse() 逆转 reverse_copy…
cb47a_c++_STL_算法_排列组合next_prev_permutation 使用前必须先排序.必须是 1,2,3或者3,2,1.否者结果不准确.如果, 1,2,4,6.这样数据不会准确next_permutation()//原始数据是从小到大的, 1,2,3prev_permutation() //原始数据是从大到小的,比如 3 ,2 ,1,则可以使用这个算法. 3个数字就6种组合.1 2 31 3 22 1 32 3 13 1 2 3 2 1 返回值是ture,则还有下一个组合fal…
cb46a_c++_STL_算法_逆转和旋转reverse_rotateSTL算法--变序性算法reverse() 逆转reverse_copy()一边复制一般逆转rotate()旋转,某个位置开始前后交换位置rotate(ivec2.begin(), ivec2.begin() + 2, ivec2.end());1,2,3,4,5,6,7,8,9,rotate后:3,4,5,6,7,8,9,1,2, rotate_copy()一边复制一般旋转 ...next_permutation()pre…
cb45a_c++_STL_算法_删除_(3)_unique(唯一的意思)删除连续性的重复的数据unique(b,e),删除连续性的,删除重复的数据,比如如果有两个连续的5,5,则留下一个.unique(b,e,p)unique_copy(b1,e1,b2)unique_copy(b1,e1,b2,p) copy(source, source + sourceNum,back_inserter(ilist));//ilist是空的,无数据,所以需要,back_inserter 删除性算法 注意:…
cb44a_c++_STL_算法_删除_(2)remove_copy_remove_copy_if remove_copy()//在复制过程中删除一些数据remove_copy_if() 删除性算法:remove()remove_if()remove_copy()remove_copy_if()unique()unique_copy() error C2760: 语法错误: 意外的令牌“标识符”,预期的令牌为“;”vs2017打开项目工程----> 属性 ---> c/c++ --> 语…
cb43a_c++_STL_算法_删除_(1)remove_remove_ifremove()remove_if() 注意:1.并不是真正的删除,而是把后面的元素向前移动,覆盖被删除元素,元素个数并没有减少最后的一位或者两个的数据向前移动后,最后的数据没有其他数据覆盖,所以数据依然存在.2.返回值是:新的逻辑终点,删除后,都采用逻辑终点.error C2760: 语法错误: 意外的令牌“标识符”,预期的令牌为“;”vs2017打开项目工程----> 属性 ---> c/c++ --> 语…
cb42a_c++_STL_算法_替换_replacereplace(b,e,ov,nv),ov,old value, nv,new valuereplace_if(b,e,p,v) 根据p的条件,全部更换成v的值replace_copy(b1,e1,b2,ov,nv)//边复制变替换replace_copy_if(b1,e1,b1,p,v) error C2760: 语法错误: 意外的令牌“标识符”,预期的令牌为“;”vs2017打开项目工程----> 属性 ---> c/c++ -->…
cb41a_c++_STL_算法_填充新值fill_generatefill(b,e,v)fill_n(b,n,v),填充n个vgenerate(b,e,p)generate_n(b,n,p) generate_n(back_inserter(ilist), 5, rand);//插入5个随机数,rand是个随机数函数 STL算法-修改性算法for_each()copy()copy_backward()transform()merge()swap_ranges()fill()fill_n() g…
cb40a_c++_STL_算法_交换swap_rangesswap_ranges(b,e,b2);如果两个容器的数据数量不一致时,只交换一部分数据,a里面3个,b里面5个,则只会交换3个,b里面还有两个不变 注意:下列两种方法也是交换算法1.容器的swap()成员函数2.赋值操作 /*cb40a_c++_STL_算法_交换swap_ranges swap_ranges(b,e,b2); 如果两个容器的数据数量不一致时,只交换一部分数据, a里面3个,b里面5个,则只会交换3个,b里面还有两个不…
cb39a_c++_STL_算法_for_each_transform_比较for_each() 速度快,不灵活transform() 速度慢, 非常灵活 STL算法-修改性算法for_each()copy()copy_backward()transform()merge()swap_ranges()fill()fill_n() generate()generate_n()replace()replace_if()replace_copy()replace_copy_if() void squa…
cb38a_c++_STL_算法_transformtransform()算法有两种形式:transform(b1,e1,b2,op);//b1(源区间)的数据通过op函数处理,存放在b2(目标区间)transform(b1,e1,b2,b3,op)//把b1,b2结合一起通过op函数处理,存放到b3 注意:1.如果目标与源相同,transform()就和for_each()一样2.如果想以某值替换符合规则的元素,应该使用replace()算法. transform在指定的范围内应用于给定的操作…
cb37a-_c++_STL_算法_复制元素copy_copy_backward copy(),同一个容器内部区间的拷贝,或者容器与容器之间的拷贝copy_backward()//向后copy 注意:1.没有copy_if算法,可以使用remove_copy_if()算法2.复制过程中要逆转元素次序,使用reverse_copy()算法3.把容器内所有元素赋值给另一个容器,要使用赋值操作符或者容器的assign()成员函数4.复制工程中删除某些元素,使用remove_copy()和remove_…
*cb36a_c++_STL_算法_区间的比较equal_mismatch_lexicographical_compare 区间:容器中的全部数据或者部分数据,都叫做区间 equal(b,e,b2),比较两个容器数据是不是相等 ,b(容器1,迭代器begin()),e(容器1,迭代器end(),b2(容器2,迭代器2指向的位置,begin2if(equal(ivec.begin(),ivec.end(),ilist.begin())) equal(b,e,b2,p) p,parameter,函数…
cb34a_c++_STL_算法_查找算法_(7)_lower_bound//针对已序区间的查找算法,如set,multiset关联容器-自动排序lower_bound()--第一个可能的位置upper_bound()--查找最后一个可能的位置equal_range()--同时查找第一个和最后一个可能的位置.做了两件事,先做lower_bound(),再upper_bound() pair<list<int>::iterator, list<int>::iterator>…
cb33a_c++_STL_算法_查找算法_(6)binary_search_includes//针对已序区间的查找算法,如set,multiset关联容器-自动排序binary_search(b,e,v),begin,end,value--返回bool,不会告诉具体找到的位置.只能找一个if (binary_search(iset.begin(), iset.end(), 5))//返回boolbinary_search(b,e,v,p) begin,end, value,parameter(…
cb32a_c++_STL_算法_查找算法_(5)adjacent_findadjacent_find(b,e),b,begin(),e,end()adjacent_find(b,e,p),p-parameter(谓词),函数,条件,规则.连续的两个符合条件的数据adjacent_find() 算法可以用来搜索序列中两个连续相等的元素.用 == 运算符来比较连续的一对元素,返回的迭代器指向前两个相等元素中的第一个.如果没有一对相等的元素,这个算法返回这个序列的结束迭代器. http://c.bi…
cb31a_c++_STL_算法_查找算法_(4)find_first_offind_first_of(b,e,sb,se),sb,second begin, se,second end();find_first_of(b,e,sb,se,bp),bp--谓词,就是一个函数,或者函数对象,返回一个bool 使用逆向迭代器,实现string类的rfind.找最后一个.reverse_find=rfind没有find_last_of算法,string类的成员函数有find_last_of find(…
cb30a_c++_STL_算法_查找算法_(3)search_find_endsearch()pos = search(ideq.begin(), ideq.end(), ilist.begin(), ilist.end());find_end(),从后面开始找 注意:这两个算法是一对第二个算法应该叫search_end(),但是被命名为find_end() pos2 = search(ivec.begin(), ivec.end(),checkEvenArgs,checkEvenArgs+3…
cb29a_c++_STL_算法_查找算法_(2)search_n//比如:连续查找连续的n个8search_n(b,e,c,v),迭代器b,begin(),e,end().连续的c个vpos=search_n(ideq.begin(), ideq.end(), 4, 3); search_n(b,e,c,v,p) p,谓词参数,查找的规则(条件)pos = search_n(ideq.begin(), ideq.end(), 3, 6, greater<int>());greater<…
cb28a_c++_STL_算法_查找算法_(1)find_find_iffind() //线性查找,比较慢.pos1 = find(ilist.begin(), ilist.end(), 5);find_if()search_n()search()find_end()find_first_of()adjacent_find()注意:1.如果是已序区间,可以使用已序区间的查找算法(效率高)binary_search()includes()lower_bound()upper_bound()2.关…
cb27a_c++_STL_算法_最小值和最大值min_element(b,e) b--begin(), e--end()min_element(b,e,op). op:函数,函数对象,一元谓词.max_element(b,e)max_element(b,e,op) bool absLess(int elem1, int elem2),返回bool,有两个参数,就是二元谓词 error C2661: “std::deque<int,std::allocator<_Ty>>::ins…
cb26a_c++_STL_算法_元素计数所有容器都可以使用countcount_if关联容器的等效成员函数,容器自己的成员函数速度较快1.set.count2.multiset.count3.map.count4.multimap.count error C2275: “std::greater<int>”: 将此类型用作表达式非法少了括号:std::greater<int>()error C3861: “bind2nd”: 找不到标识符需要包含:#include <fun…
cb52a_c++_STL_堆排序算法make_push_pop_sort_heapheapsort堆排序算法make_heap()-特殊的二叉树,每一个节点都比根小,根就是最大的数.大根堆,也可以做成 小根堆寻找最大数,最大数排在最前面.或者寻找最小数,最小数排在最前面push_heap()pop_heap()sort_heap() 把vector做成像一个堆 /*cb52a_c++_STL_堆排序算法make_push_pop_sort_heap heapsort堆排序算法 make_hea…
for_each()和transform()算法比较 1)STL 算法 – 修改性算法  for_each()  copy()  copy_backward()  transform()  merge()  swap_ranges()  fill()  fill_n()  generate()  generate_n()  replace  replace_if()  replace_copy()  replace_copy_if() 2)  for_each() 速度快 不灵活  transf…
函数对象: 重载函数调用操作符的类,其对象常称为函数对象(function object),即它们是行为类似函数的对象.一个类对象,表现出一个函数的特征,就是通过"对象名+(参数列表)"的方式使用一个类对象,如果没有上下文,完全可以把它看作一个函数对待. 这是通过重载类的operator()来实现的. "在标准库中,函数对象被广泛地使用以获得弹性",标准库中的很多算法都可以使用函数对象或者函数来作为自定的回调行为: demo #include <iostrea…
算法部分主要由头文件<algorithm>,<numeric>和<functional>组成. <algorithm>是所有STL头文件中最大的一个,其中常用到的功能范围涉及到比较.交换.查找.遍历操作.复制.修改.反转.排序.合并等等. <numeric>体积很小,只包括几个在序列上面进行简单数学运算的模板函数,包括加法和乘法在序列上的一些操作. <functional>中则定义了一些模板类,用以声明函数对象. 算法分类 按功能分类…