zoukankan      html  css  js  c++  java
  • C++11新特性应用--介绍几个新增的便利算法(不更改容器中元素顺序的算法)

    总所周知。C++ STL中有个头文件,名为algorithm。即算法的意思。


    The header<algorithm>defines a collection of functions especially designed to be used on ranges of elements.

    所以,要八一八这个头文件里C++11新增的几个算法,今天主要描写叙述的几个算法不改变容器中元素的顺序。

    这里还要啰嗦一句,使用stl算法时,假设与lambda表达式组合使用,那么代码会更加简洁。

    find_if_not
    该算法在之前介绍过,请參阅博客《实战c++中的vector系列–vector应用之STL的find、find_if、find_end、find_first_of、find_if_not(C++11)》。

    all_of
    原型:

    template <class InputIterator, class UnaryPredicate>
      bool all_of (InputIterator first, InputIterator last, UnaryPredicate pred);

    作用:
    Test condition on all elements in range
    Returns true if pred returns true for all the elements in the range [first,last) or if the range is empty, and false otherwise.
    检測区间[first, last)中是否全部的元素都满足一元推断表达式pred。全部的元素都满足条件返回true,否则返回false.

    应用:

    #include <iostream>     // std::cout
    #include <algorithm>    // std::all_of
    #include <array>        // std::array
    
    int main () {
      std::array<int,8> foo = {3,5,7,11,13,17,19,23};
    
      if ( std::all_of(foo.begin(), foo.end(), [](int i){return i%2;}) )
        std::cout << "All the elements are odd numbers.
    ";
    
      return 0;
    }
    //输出:
    All the elements are odd numbers.

    any_of
    原型:

    template <class InputIterator, class UnaryPredicate>
      bool any_of (InputIterator first, InputIterator last, UnaryPredicate pred);

    作用:
    Test if any element in range fulfills condition
    Returns true if pred returns true for any of the elements in the range [first,last), and false otherwise.

    应用:

    #include <iostream>     // std::cout
    #include <algorithm>    // std::any_of
    #include <array>        // std::array
    
    int main () {
      std::array<int,7> foo = {0,1,-1,3,-3,5,-5};
    
      if ( std::any_of(foo.begin(), foo.end(), [](int i){return i<0;}) )
        std::cout << "There are negative elements in the range.
    ";
    
      return 0;
    }
    //输出:
    There are negative elements in the range.

    none_of
    原型:

    template <class InputIterator, class UnaryPredicate>
      bool none_of (InputIterator first, InputIterator last, UnaryPredicate pred);

    作用:
    Returns true if pred returns false for all the elements in the range [first,last) or if the range is empty, and false otherwise.

    应用:

    #include <iostream>     // std::cout
    #include <algorithm>    // std::none_of
    #include <array>        // std::array
    
    int main () {
      std::array<int,8> foo = {1,2,4,8,16,32,64,128};
    
      if ( std::none_of(foo.begin(), foo.end(), [](int i){return i<0;}) )
        std::cout << "There are no negative elements in the range.
    ";
    
      return 0;
    }
    //输出:
    There are no negative elements in the range.

    is_permutation
    permutation 名词 排列 、交换等意思。


    该函数是用来推断两个序列是否为同一元素集的不同排列。
    该函数使用operator==或者是pred来推断两个元素是否是相等的。

    原型:

    template <class ForwardIterator1, class ForwardIterator2>
       bool is_permutation (ForwardIterator1 first1, ForwardIterator1 last1,
                            ForwardIterator2 first2);   
    template <class ForwardIterator1, class ForwardIterator2, class BinaryPredicate>
       bool is_permutation (ForwardIterator1 first1, ForwardIterator1 last1,
                            ForwardIterator2 first2, BinaryPredicate pred);

    作用:
    Test whether range is permutation of another
    Compares the elements in the range [first1,last1) with those in the range beginning at first2, and returns true if all of the elements in both ranges match, even in a different order.

    应用:

    #include <iostream>     // std::cout
    #include <algorithm>    // std::is_permutation
    #include <array>        // std::array
    
    int main () {
      std::array<int,5> foo = {1,2,3,4,5};
      std::array<int,5> bar = {3,1,4,5,2};
    
      if ( std::is_permutation (foo.begin(), foo.end(), bar.begin()) )
        std::cout << "foo and bar contain the same elements.
    ";
    
      return 0;
    }
    //输出:
    foo and bar contain the same elements.

    这里须要注意的是。你不能突发奇想,比方用大于号或是小于号进行比較,你仅仅能这样:
    The elements are compared using operator== (or pred)

  • 相关阅读:
    CMD 已存在的表, 没有主键的 添加主键属性
    回调函数 call_back
    在Ubuntu下安装MySQL,并将它连接到Navicat for Mysql
    F查询和Q查询,事务及其他
    Djabgo ORM
    Diango 模板层
    Django视图系统
    Django简介
    Web 框架
    HTTP协议
  • 原文地址:https://www.cnblogs.com/zsychanpin/p/7216453.html
Copyright © 2011-2022 走看看