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

C++11新特性應用--介紹幾個新增的便利算法(關於最大值和最小值的算法)

編輯:C++入門知識

C++11新特性應用--介紹幾個新增的便利算法(關於最大值和最小值的算法)


工作中往往有這樣的場景:選出一個容器,或是范圍內的最大值、最大元素、最小值和最小元素。很普通的做法就是,我們用一個for循環進行遍歷,然後達到我們的效果。

其實stl的算法中就提供了一些關於最大和最小的操作,我們往往忽略他們。

這篇博客也是關於C++11中新增加的算法最後一次博客了。

還是先介紹幾個在C++11之前就存在的,但是與本博客息息相關的算法。

首先是:
min和max
由於很簡單,所以直接上代碼:

#include      // std::cout
#include     // std::min

int main () {
  std::cout << "min(1,2)==" << std::min(1,2) << '\n';
  std::cout << "min(2,1)==" << std::min(2,1) << '\n';
  std::cout << "min('a','z')==" << std::min('a','z') << '\n';
  std::cout << "min(3.14,2.72)==" << std::min(3.14,2.72) << '\n';

  std::cout << "max(1,2)==" << std::max(1,2) << '\n';
  std::cout << "max(2,1)==" << std::max(2,1) << '\n';
  std::cout << "max('a','z')==" << std::max('a','z') << '\n';
  std::cout << "max(3.14,2.73)==" << std::max(3.14,2.73) << '\n';

  return 0;
}

接下來是C++11新增的:
minmax
我們從字面上就可以有所把握。
返回的是一個pair 。
Returns a pair with the smallest of a and b as first element, and the largest as second. If both are equivalent, the function returns make_pair(a,b).

看代碼:

#include      // std::cout
#include     // std::minmax

int main () {
  auto result = std::minmax({1,2,3,4,5});

  std::cout << "minmax({1,2,3,4,5}): ";
  std::cout << result.first << ' ' << result.second << '\n';
  return 0;
}

至此,你肯定意猶未盡,好像欠缺了點什麼。上面提到的min和max沒有用於range。

min_element和max_element

#include      // std::cout
#include     // std::min_element, std::max_element

bool myfn(int i, int j) { return i

效仿minmax,同樣是C++11新增的內容:

minmax_element
Returns a pair with an iterator pointing to the element with the smallest value in the range [first,last) as first element, and the largest as second.

#include      // std::cout
#include     // std::minmax_element
#include         // std::array

int main () {
  std::array foo {3,7,2,9,5,8,6};

  auto result = std::minmax_element (foo.begin(),foo.end());

  // print result:
  std::cout << "min is " << *result.first;
  std::cout << ", at position " << (result.first-foo.begin()) << '\n';
  std::cout << "max is " << *result.second;
  std::cout << ", at position " << (result.second-foo.begin()) << '\n';

  return 0;
}

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