C++STL库之algorithm库

algorithm库函数集合:

不修改内容的序列操作:

adjacent_find 查找两个相邻(Adjacent)的等价(Identical)元素
all_ofC++11 检测在给定范围中是否所有元素都满足给定的条件
any_ofC++11 检测在给定范围中是否存在元素满足给定条件
count 返回值等价于给定值的元素的个数
count_if 返回值满足给定条件的元素的个数
equal 返回两个范围是否相等
find 返回第一个值等价于给定值的元素
find_end 查找范围A中与范围B等价的子范围最后出现的位置
find_first_of 查找范围A中第一个与范围B中任一元素等价的元素的位置
find_if 返回第一个值满足给定条件的元素
find_if_notC++11 返回第一个值不满足给定条件的元素
for_each 对范围中的每个元素调用指定函数
mismatch 返回两个范围中第一个元素不等价的位置
none_ofC++11 检测在给定范围中是否不存在元素满足给定的条件
search 在范围A中查找第一个与范围B等价的子范围的位置
search_n 在给定范围中查找第一个连续n个元素都等价于给定值的子范围的位置

修改内容的序列操作:

copy 将一个范围中的元素拷贝到新的位置处
copy_backward 将一个范围中的元素按逆序拷贝到新的位置处
copy_ifC++11 将一个范围中满足给定条件的元素拷贝到新的位置处
copy_nC++11 拷贝 n 个元素到新的位置处
fill 将一个范围的元素赋值为给定值
fill_n 将某个位置开始的 n 个元素赋值为给定值
generate 将一个函数的执行结果保存到指定范围的元素中,用于批量赋值范围中的元素
generate_n 将一个函数的执行结果保存到指定位置开始的 n 个元素中
iter_swap 交换两个迭代器(Iterator)指向的元素
moveC++11 将一个范围中的元素移动到新的位置处
move_backwardC++11 将一个范围中的元素按逆序移动到新的位置处
random_shuffle 随机打乱指定范围中的元素的位置
remove 将一个范围中值等价于给定值的元素删除
remove_if 将一个范围中值满足给定条件的元素删除
remove_copy 拷贝一个范围的元素,将其中值等价于给定值的元素删除
remove_copy_if 拷贝一个范围的元素,将其中值满足给定条件的元素删除
replace 将一个范围中值等价于给定值的元素赋值为新的值
replace_copy 拷贝一个范围的元素,将其中值等价于给定值的元素赋值为新的值
replace_copy_if 拷贝一个范围的元素,将其中值满足给定条件的元素赋值为新的值
replace_if 将一个范围中值满足给定条件的元素赋值为新的值
reverse 反转排序指定范围中的元素
reverse_copy 拷贝指定范围的反转排序结果
rotate 循环移动指定范围中的元素
rotate_copy 拷贝指定范围的循环移动结果
shuffleC++11 用指定的随机数引擎随机打乱指定范围中的元素的位置
swap 交换两个对象的值
swap_ranges 交换两个范围的元素
transform 对指定范围中的每个元素调用某个函数以改变元素的值
unique 删除指定范围中的所有连续重复元素,仅仅留下每组等值元素中的第一个元素。
unique_copy 拷贝指定范围的唯一化(参考上述的 unique)结果

划分操作:

is_partitionedC++11 检测某个范围是否按指定谓词(Predicate)划分过
partition 将某个范围划分为两组
partition_copyC++11 拷贝指定范围的划分结果
partition_pointC++11 返回被划分范围的划分点
stable_partition 稳定划分,两组元素各维持相对顺序

排序操作:

is_sortedC++11 检测指定范围是否已排序
is_sorted_untilC++11 返回最大已排序子范围
nth_element 部份排序指定范围中的元素,使得范围按给定位置处的元素划分
partial_sort 部份排序
partial_sort_copy 拷贝部分排序的结果
sort 排序
stable_sort 稳定排序

二分法查找操作:

binary_search 判断范围中是否存在值等价于给定值的元素
equal_range 返回范围中值等于给定值的元素组成的子范围
lower_bound 返回指向范围中第一个值大于或等于给定值的元素的迭代器
upper_bound 返回指向范围中第一个值大于给定值的元素的迭代器

集合操作:

includes 判断一个集合是否是另一个集合的子集
inplace_merge 就绪合并
merge 合并
set_difference 获得两个集合的差集
set_intersection 获得两个集合的交集
set_symmetric_difference 获得两个集合的对称差
set_union 获得两个集合的并集

堆操作:

is_heap 检测给定范围是否满足堆结构
is_heap_untilC++11 检测给定范围中满足堆结构的最大子范围
make_heap 用给定范围构造出一个堆
pop_heap 从一个堆中删除最大的元素
push_heap 向堆中增加一个元素
sort_heap 将满足堆结构的范围排序

最大/最小操作:

is_permutationC++11 判断一个序列是否是另一个序列的一种排序
lexicographical_compare 比较两个序列的字典序
max 返回两个元素中值最大的元素
max_element 返回给定范围中值最大的元素
min 返回两个元素中值最小的元素
min_element 返回给定范围中值最小的元素
minmaxC++11 返回两个元素中值最大及最小的元素
minmax_elementC++11 返回给定范围中值最大及最小的元素
next_permutation 返回给定范围中的元素组成的下一个按字典序的排列
prev_permutation 返回给定范围中的元素组成的上一个按字典序的排列

一,巡防算法

        for_each(容器起始地址,容器结束地址,要执行的方法)


[html]  view plain  copy
  1. #include <iostream>  
  2. #include <algorithm>  
  3. #include <vector>  
  4.   
  5. using namespace std;  
  6.   
  7. template<class T>  
  8. struct plus2  
  9. {  
  10.     void operator()(T&x)const  
  11.     {  
  12.         x+=2;  
  13.     }  
  14.       
  15. };  
  16.   
  17. void printElem(int& elem)  
  18. {  
  19.   cout << elem << endl;  
  20. }  
  21.   
  22.   
  23. int main()  
  24. {  
  25.     int ia[]={0,1,2,3,4,5,6};  
  26.     for_each(ia,ia+7,printElem);//输出  
  27.       
  28.     int ib[]={7,8,9,10,11,12,13};  
  29.     vector<int> iv(ib,ib+7);  
  30.     for_each(iv.begin(),iv.end(),plus2<int>());//更改元素  
  31.     for_each(iv.begin(),iv.end(),printElem);//输出  
  32.       
  33.       
  34.     return 0;  
  35. }  


二,find算法

   int *find(int *begin,int *end,int  value)

   前闭后合的区间 begin,end中,查找value如果查找到了就返回第一个符合条件的元素,否则返回end指针

[html]  view plain  copy
  1. #include <iostream>  
  2. #include <algorithm>  
  3.   
  4. using namespace std;  
  5.   
  6. void printElem(int& elem)  
  7. {  
  8.   cout << elem << endl;  
  9. }  
  10.   
  11.   
  12. int main()  
  13. {  
  14.     int ia[]={0,1,2,3,4,5,6};  
  15.       
  16.     int *ifind(ia,ia+7,9);//在整个数组中查找元素 9   
  17.     int *jfind(ia,ia+7,3);//在整个数组中查找元素 3  
  18.     int *end=ia+7;//数组最后位置   
  19.     if(i == end)   
  20.        cout<<"没有找到元素 9"<<endl;  
  21.     else   
  22.        cout<<"找到元素9"<<endl;  
  23.          
  24.     if(j == end)   
  25.        cout<<"没有找到元素 3"<<endl;  
  26.     else   
  27.        cout<<"找到元素"<<*j<<endl;  
  28.     return 0;  
  29. }  


三,数值算法

        包含在<numeric>头文件中

[html]  view plain  copy
  1. #include <iostream>  
  2. #include <numeric>  //数值算法   
  3. #include <vector>  
  4. #include <functional>   
  5. #include <iterator>   
  6.   
  7. #include <math.h>   
  8.  using namespace std;  
  9.    
  10.  int main()  
  11.  {  
  12.     int ia[]={1,2,3,4,5};  
  13.     vector<int> iv(ia,ia+5);  
  14.       
  15.     cout<<accumulate(iv.begin(),iv.end(),0)<<endl; //累加  初值为0   
  16.     cout<<accumulate(iv.begin(),iv.end(),0,minus<int>())<<endl; //累加 符号位负  
  17.        
  18.     cout<<inner_product(iv.begin(),iv.end(),iv.begin(),10)<<endl;//两个数组内积  初值为10   
  19.     cout<<inner_product(iv.begin(),iv.end(),iv.begin(),10,minus<int>(),plus<int>())<<endl;//10-(1+1)-(2+2)  
  20.       
  21.     ostream_iterator<int> oite(cout," ");//迭代器绑定到cout上作为输出使用  
  22.     partial_sum(iv.begin(),iv.end(),oite);//依次输出前n个数的和   
  23.       
  24.     cout<<endl;   
  25.     partial_sum(iv.begin(),iv.end(),oite,minus<int>());//依次输出第一个数减去(除第一个数外到当前数的和)  
  26.       
  27.     cout<<endl;   
  • 40
    点赞
  • 201
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值