• C++(五十一) — 容器中常见算法(查找、排序、拷贝替换)


    1、find();

       find()算法的作用是在指定的一段序列中查找某个数,包含三个参数,前两个参数是表示元素范围的迭代器,第三个参数是要查找的值。

       例:fing(vec.begin(), vec.end(), val); //在vec中查找值val,该val可以是数字、字符串。

    2、count();

       count()算法的作用是查看给定序列中给定值出现的次数,同样包含三个参数,前两个参数是表示元素范围的迭代器,第三个参数是要查找的值。

       例:count(vec1.begin(), vec1.end(), 2);//在vec1中查看2出现的次数。

    3、find_if();

        find_if()算法的作用是在输入序列中查找第一个满足条件的元素,返回第一个指向满足条件的元素的迭代器。

        例:auto wc = find_if(vec.begin(), vec.end(), [sz](const string &a){return a.size>=sz;});//其中sz为在使用find_if的函数内部定义的局部变量。

        上诉算法得到的是第一个指向长度不小于sz的元素的迭代器,如果没有则返回vec.end();

    4、count_if();

      预先定义比较函数;

    bool GreatThree(int num)
    {
        return num > 3;
    }
    int num = count_if(v1.begin(), v1.end(), GreatThree);

    5、for_each();

        for_each()算法的主要作用是打印输出序列。接收三个参数,前两个为打印元素的范围,后一个为一个可调用对象。

        例:for_each(wc, vec.end(), [](const string &s){cout << s << " ";});

             cout << endl;

        上述程序的作用就是打印输出序列中从wc到vec.end()中的元素。

    6、adjacent_find();

      查找重复元素,并返回第一个出现的位置。

      例:vector<int>::iterator it = adjacent_find(vec.begin(), vec.end());

    7、binary_search();

      在有序序列中查找,找到后返回 true,注意,在无序序列中不可使用。

      例:bool bFind = binary_search(setInt.begin(), setInt.end(), 5);

    排序

    8、merge(); 或者 sort(); 形式类似。

      合并两个有序序列,放到另一个序列中。

    int main()
    {
        // v1 + v2 = v3
        vector<int> v1, v2, v3;
        v1.push_back(1);
        v1.push_back(3);
        v1.push_back(5);
    
        v2.push_back(2);
        v2.push_back(4);
        v2.push_back(6);
    
        v3.resize(9);
        merge(v1.begin(), v1.end(), v2.begin(), v2.end(), v3.begin());
         //输出 1 2 3 4 5 6 7 8 9
        vector<int>::iterator it;
        for (it = v3.begin(); it != v3.end(); ++it)
        {
            cout << *it << endl;
        }
        system("pause");
        return 0;
    }

    9、random_shuffle()

      随机打乱顺序,也可应用于字符串。

      例:random_shuffle(v1.begin(), v1.end());

     10、reverse()

       倒序输出。

      reverse(v1.begin(), v1.end());

     拷贝替换

    11、copy()

      copy(v1.begin(), v1.end(), v3.begin());

    12、replace();  replace_if(); 

      replace(v1.begin(), v1.end(), 3, 8);//把容器v1中所有值为 3 的元素,替换为 8 。

    bool greaterEqual5(int &n)
    {
        return n >= 5;
    }
    // 容器中所有 满足条件的都替换为 8
    replace_if(v1.begin(), v1.end(), greaterEqual5, 8);

     

  • 相关阅读:
    Spark权威指南(中文版)----第5章 结构化API基本操作
    Spark权威指南(中文版)----第2章 Spark简介
    Spark权威指南(中文版)----第4章 结构化API概述
    Spark权威指南(中文版)----第1章Apache Spark是什么
    Java读写锁的实现原理
    【进阶之路】动态代理与字节码生成
    如何写好技术文档——来自Google十多年的文档经验
    谈谈 C++ STL 中的迭代器
    面试官疯狂问我联表查询怎么办? 愣着干嘛?进来白嫖啊!
    面试问题记录 三 (JavaWeb、JavaEE)
  • 原文地址:https://www.cnblogs.com/eilearn/p/10999090.html
Copyright © 2020-2023  润新知