程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++11新特性應用--介紹幾個新增的便利算法(不更改容器中元素順序的算法)

C++11新特性應用--介紹幾個新增的便利算法(不更改容器中元素順序的算法)

編輯:C++入門知識

C++11新特性應用--介紹幾個新增的便利算法(不更改容器中元素順序的算法)


總所周知,C++ STL中有個頭文件,名為algorithm,即算法的意思。
The headerdefines 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 
  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      // std::cout
#include     // std::all_of
#include         // std::array

int main () {
  std::array 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.\n";

  return 0;
}
//輸出:
All the elements are odd numbers.

any_of
原型:

template 
  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      // std::cout
#include     // std::any_of
#include         // std::array

int main () {
  std::array 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.\n";

  return 0;
}
//輸出:
There are negative elements in the range.

none_of
原型:

template 
  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      // std::cout
#include     // std::none_of
#include         // std::array

int main () {
  std::array 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.\n";

  return 0;
}
//輸出:
There are no negative elements in the range.

is_permutation
permutation 名詞 排列 、交換等意思。
該函數是用來判斷兩個序列是否為同一元素集的不同排列!
該函數使用operator==或者是pred來判斷兩個元素是否是相等的。

原型:

template 
   bool is_permutation (ForwardIterator1 first1, ForwardIterator1 last1,
                        ForwardIterator2 first2);   
template 
   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      // std::cout
#include     // std::is_permutation
#include         // std::array

int main () {
  std::array foo = {1,2,3,4,5};
  std::array 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.\n";

  return 0;
}
//輸出:
foo and bar contain the same elements.

這裡需要注意的是,你不能突發奇想,比如用大於號或是小於號進行比較,你只能這樣:
The elements are compared using operator== (or pred)

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved