C++ STL(algorithm)

algorithm算法(基于迭代器的非成员模版函数)如下:
不修改内容的序列操作:
adjacent_find 查找两个相邻(Adjacent)的等价(Identical)元素
all_of 检测在给定范围中是否所有元素都满足给定的条件
any_of 检测在给定范围中是否存在元素满足给定条件
count 返回值等价于给定值的元素的个数
count_if 返回值满足给定条件的元素的个数
equal 返回两个范围是否相等
find 返回第一个值等价于给定值的元素
find_end 查找范围A中与范围B等价的子范围最后出现的位置
find_first_of 查找范围A中第一个与范围B中任一元素等价的元素的位置
find_if 返回第一个值满足给定条件的元素
find_if_not 返回第一个值不满足给定条件的元素
for_each 对范围中的每个元素调用指定函数
mismatch 返回两个范围中第一个元素不等价的位置
none_of 检测在给定范围中是否不存在元素满足给定的条件
search 在范围A中查找第一个与范围B等价的子范围的位置
search_n 在给定范围中查找第一个连续n个元素都等价于给定值的子范围的位置
修改内容的序列操作:
copy 将一个范围中的元素拷贝到新的位置处
copy_backward 将一个范围中的元素按逆序拷贝到新的位置处
copy_if 将一个范围中满足给定条件的元素拷贝到新的位置处
copy_n 拷贝 n 个元素到新的位置处
fill 将一个范围的元素赋值为给定值
fill_n 将某个位置开始的 n 个元素赋值为给定值
generate 将一个函数的执行结果保存到指定范围的元素中,用于批量赋值范围中的元素
generate_n 将一个函数的执行结果保存到指定位置开始的 n 个元素中
iter_swap 交换两个迭代器(Iterator)指向的元素
move 将一个范围中的元素移动到新的位置处
move_backward 将一个范围中的元素按逆序移动到新的位置处
random_shuffle 随机打乱指定范围中的元素的位置
remove 将一个范围中值等价于给定值的元素删除
remove_if 将一个范围中值满足给定条件的元素删除
remove_copy 拷贝一个范围的元素,将其中值等价于给定值的元素删除
remove_copy_if 拷贝一个范围的元素,将其中值满足给定条件的元素删除
replace 将一个范围中值等价于给定值的元素赋值为新的值
replace_copy 拷贝一个范围的元素,将其中值等价于给定值的元素赋值为新的值
replace_copy_if 拷贝一个范围的元素,将其中值满足给定条件的元素赋值为新的值
replace_if 将一个范围中值满足给定条件的元素赋值为新的值
reverse 反转排序指定范围中的元素
reverse_copy 拷贝指定范围的反转排序结果
rotate 循环移动指定范围中的元素
rotate_copy 拷贝指定范围的循环移动结果
shuffle 用指定的随机数引擎随机打乱指定范围中的元素的位置
swap 交换两个对象的值
swap_ranges 交换两个范围的元素
transform 对指定范围中的每个元素调用某个函数以改变元素的值
unique 删除指定范围中的所有连续重复元素,仅仅留下每组等值元素中的第一个元素。
unique_copy 拷贝指定范围的唯一化(参考上述的 unique)结果
划分操作:
is_partitioned 检测某个范围是否按指定谓词(Predicate)划分过
partition 将某个范围划分为两组
partition_copy 拷贝指定范围的划分结果
partition_point 返回被划分范围的划分点
stable_partition 稳定划分,两组元素各维持相对顺序
排序操作:
is_sorted 检测指定范围是否已排序
is_sorted_until 返回最大已排序子范围
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_until 检测给定范围中满足堆结构的最大子范围
make_heap 用给定范围构造出一个堆
pop_heap 从一个堆中删除最大的元素
push_heap 向堆中增加一个元素
sort_heap 将满足堆结构的范围排序
最大/最小操作:
is_permutation 判断一个序列是否是另一个序列的一种排序
lexicographical_compare 比较两个序列的字典序
max 返回两个元素中值最大的元素
max_element 返回给定范围中值最大的元素
min 返回两个元素中值最小的元素
min_element 返回给定范围中值最小的元素
minmax 返回两个元素中值最大及最小的元素
minmax_element 返回给定范围中值最大及最小的元素
next_permutation 返回给定范围中的元素组成的下一个按字典序的排列
prev_permutation 返回给定范围中的元素组成的上一个按字典序的排列

#include<iostream>
#include<vector>
#include<algorithm>
#include<time.h>
using namespace std;

void Show(int nValue)
{
    cout << nValue << " ";
}
bool Rule(int nValue_1,int nValue_2)
{
    return nValue_1>nValue_2;
}
int main()
{
    vector<int> vec(5,10);//创建一个数组,数组里面有5个元素;每个元素初始化都是10
    vector<int>::iterator ite=vec.begin();//定义一个数组的迭代器,指向数组的第一个元素;

    for(int i=0;i<5;i++)//将1-5存到数组中
    {
        vec[i]=i+1;
    }
    cout <<"原始赋值数组:";
    ::for_each(vec.begin(),vec.end(),&Show);//遍历打印每个元素
    cout << endl;

    //一、利用时间种子打乱顺序赋值;
    srand((unsigned int )time(0));

    ::random_shuffle(vec.begin(),vec.end());
    cout <<"打乱顺序:";
    ::for_each(vec.begin(),vec.end(),&Show);
    cout << endl;

    //二、排序
    cout <<"默认从小到大排序:";
    ::sort(vec.begin(),vec.end());
    ::for_each(vec.begin(),vec.end(),&Show);
    cout << endl;
    //三、排序自定规则
    ::sort(vec.begin(),vec.end(),&Rule);
    cout <<"自定规则从大到小排序:";
    ::for_each(vec.begin(),vec.end(),&Show);
    cout << endl;

    //四、翻转排序

    ::reverse(vec.begin(),vec.end());
    cout <<"翻转排序:";
    ::for_each(vec.begin(),vec.end(),&Show);
    cout << endl;

    //五、选择性遍历开始;

    ite++;
    ite++;
    ite--;
    cout <<"选择性遍历开始:";
    ::for_each(ite,vec.end(),&Show);
    cout << endl;

    //六、选择性翻转;
    cout <<"选择性翻转:";
    ::reverse(ite,vec.end());
    ::for_each(vec.begin(),vec.end(),&Show);
    cout << endl;

    //七、查询数组中某个元素个数

    vec.push_back(6);//先添加4个6
    vec.push_back(6);
    vec.push_back(6);
    vec.push_back(6);
    ::for_each(vec.begin(),vec.end(),&Show);
    cout << endl;

    int a=::count(vec.begin(),vec.end(),6);
    cout <<"6的个数是:" << a<< endl;

    system("pause");
    return 0;
}

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值