• 3_STL算法


    1.常用遍历算法
    1.1 for_each

    for_each(v1.begin(),v1.end(),show);
    void show(int &n) //回调函数的入口地址
    {
      cout << n << " ";
    }
    class show //函数对象
    {
    public:
      void operator()(int &n)
      {
        cout << n << " ";
      }
    protected:
    private:
    }

    for_each算法返回值是函数对象,可以记录函数的运行状态(函数对象被调用次数)

    1.2 transform
    一个容器的元素 通过op(函数对象) 变换到另一个容器中(同一个容器)
    两个容器的元素 通过op 变换到另一个容器中。


    注:如果目标与源相同,transform()和for_each()一样;
    如果想以某值替换符合规则的元素,应使用replace()(是transform的特例,但速度更快)

    transform(v1.begin(),v1.end(),increase); //回调函数 
    transform(v1.begin(),v1.end(),negate<int>()); //预定义函数对象
    transform(v1.begin(),v1.end(),bind2nd(multiplies<int>(),10)); //函数适配器和函数对象
    
    //把运算结果直接输出到屏幕 #include "iterator" //输出流迭代器的头文件 transform(v1.begin(),v1.end(),ostream_iterator<int>(cout," "),negate<int>()); int increase(int& a) //返回值为int {   return a+1; }

    区别:

    for_each算法中的函数对象 参数一般为引用,无返回值
    速度快,但不灵活


    transform算法中的函数对象 参数一般为元素,有返回值,返回类型也为元素
    速度慢,灵活;输出到原来位置,也可以输出到其他位置;

    常用查找算法:(返回值是bool类型)

    adjacent_find(v1.begin(),v2.begin()); //找元素中第一个重复的迭代器位置;
    //distance(v1.begin(),it); //可求迭代器的下标

    有序序列中的二分查找:

    binary_search(v1.begin(),v1.end(),7); //(返回值是bool类型)
    
    find(v1.begin(),v1.end(),5); //返回迭代器位置
    
    find_if(v1.begin(),v1.end(),GreatThree);   //谓词

    计数算法://返回值是元素的个数

    count(v1.begin(),v1.end(),7); 
    count_if(v1.begin(),v1.end(),bool类型的谓词); //可以对自定义数据类型进行计数

    排序:
    合并排序,是归并排序中的最后一步

    merge(v1.begin(),v1.end(),v1.begin(),v2.end(),v3.begin());
    
    sort(v1.begin(),v1.end(),CompareS); //利用谓词对自定义数据类型的排序

    随机洗牌:

    random_shuffle(v1.begin(),v1.end()); //将v1乱序
    //V1可以是一个字符串。。。string

    反转:

    reverse(v1.begin(),v1.end()); //两个指针交替往中间走,互换值

    拷贝和替换:

    vector<int>v2;
    v2.resize(v1.size());
    copy(v1.begin(),v1.end(),v2.begin());
    
    replace(v1.begin(),v1.end(),3,8); //v1中所有3替换为8;
    
    replace_if(v1.begin(),v1.end(),great_equal_5,1);//满足谓词的元素全部替换为1;
    
    swap(v1,v2);

    常用的算术和生成算法: #include <numeric>

    accumulate(v1.begin(),v1.end(),100); //范围内元素求和再加上100,返回最后的值
    
    fill(v1.begin(),v1.end(),8); //范围内元素全部填充为8;

    常用的集合算法:交集,并集,差集

    //并集:
    set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),v3.begin());
    //交集:
    set_intersection();
    //差集
    set_difference();
  • 相关阅读:
    SQL Functions
    wse 3.0
    mvc2 在 .net 4 下的ValidateInput(false) 无效
    FF3.0 不可以post空
    也谈.NET MVC 2 + ExtJS的部署问题
    ExtJs懒人笔记(2) ExtJs页面布局
    关于算法—— 一维字符串数组之间组合问题的C#实现
    (转)在ASP.NET 中实现单点登录(利用Cache, 将用户信息保存在服务器缓存中)
    XML中配置正则表达式的写法
    .NET MVC 下实现消息推送
  • 原文地址:https://www.cnblogs.com/Lunais/p/5850593.html
Copyright © 2020-2023  润新知