1
我剛剛遇到std::rank,我不太明白它可以用於什麼。我明白它的作用,但有人可以給我幾個用例嗎?我在這裏找不到有用的東西。std :: rank的用途是什麼?
我剛剛遇到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;
}
這是功課。 – user43389
它的主要用途可能是在模板元編程中,但它會根據您的需求而大不相同(我們無法猜測)。 – edmz