簡體   English   中英

std::rank 的目的是什么?

[英]What is the purpose of std::rank?

我剛遇到std::rank ,我真的不明白它可以用來做什么。 我明白它的作用,但有人可以給我一些用例嗎? 我在這里搜索時找不到任何有用的東西。

好問題。

我正在嘗試學習 C++11,所以我可以寫一些愚蠢的東西,但是……假設您想在多維數組中找到最大值。

我試圖用std::rank (和 SFINAE)回答這個問題

#include <iterator>
#include <iostream>
#include <type_traits>

template <typename X,
          typename = typename std::enable_if<0U == std::rank<X>::value>::type>
  X maxRank (X const & x)
 { return x; }

template <typename X,
          typename = typename std::enable_if<0U != std::rank<X>::value>::type>
typename std::remove_all_extents<X>::type maxRank (X const & x)
 {
   auto  it  = std::begin(x);
   auto  ret = maxRank(*it);

   for ( ; it != std::end(x) ; ++it )
    {
      auto val = maxRank(*it);

      if ( val > ret )
         ret = val;
    }

   return ret;
 }


int main ()
 {
   int  a0 = 12; 
   short a1[] = { 23, 7, 42, -19, 0, 95 };
   unsigned  a2[][2] = { {8U, 9U}, {0U, 77U}, {11U, 9U}, {5U, 3U} };
   long  a3[][3][2] = { { {123L, 3L}, {-45L, 77L}, {-12L, 678L} },
                        { {1L, -54L}, {23L, 99L}, {56L, 1234L} },
                        { {-4L, -12L}, {1L, 0L}, {122L, 19L} },
                        { {2L, 23L}, {55L, 19L}, {2L, 99L} } };

   std::cout << "maxRank a0 = " << maxRank(a0) << '\n';
   std::cout << "maxRank a1 = " << maxRank(a1) << '\n';
   std::cout << "maxRank a2 = " << maxRank(a2) << '\n';
   std::cout << "maxRank a3 = " << maxRank(a3) << '\n';

   return 0; 
 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM