Я просто столкнулся с std::rank, и я не совсем понимаю, для чего он может быть использован. Я понимаю, что он делает, но может кто-нибудь, пожалуйста, дайте мне несколько вариантов использования? Я не смог найти ничего полезного в поиске здесь.Какова цель std :: rank?
1
A
ответ
1
Хороший вопрос.
Я пытаюсь изучить 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;
}
Смежные вопросы
- 1. Какова цель std :: function?
- 2. Какова цель std :: char_traits :: assign()?
- 3. Какова цель std :: exception :: what()?
- 4. Какова цель объявления "namespace std {}"?
- 5. Понимание std :: swap(). Какова цель tr1 :: _ Remove_reference?
- 6. Какова цель std :: make_pair против конструктора std :: pair?
- 7. Какова цель QString?
- 8. Какова цель reinterpret_cast
- 9. Какова цель ErrorKind :: __ Недостаточная?
- 10. Какова цель "?"
- 11. std :: remquo цель и использование?
- 12. Какова цель модульного тестирования?
- 13. Какова цель объявления неопределенной функции std :: перед ее определением?
- 14. Какова цель: «использование пространства имен»?
- 15. Какова цель конструктора строк ostringstream?
- 16. Какова цель $ _POST?
- 17. Какова цель IApplicationBuilder.New()
- 18. Какова цель метода IntStream.empty()?
- 19. Какова цель IAsyncStateMachine.SetStateMachine?
- 20. Какова цель пакета
- 21. Какова цель заявления `pass`?
- 22. Какова цель "@SuppressWarnings (" unchecked ")"?
- 23. Какова цель этого javascript?
- 24. Какова цель константы PHP_DEBUG?
- 25. Какова цель configSections?
- 26. Какова цель сортированных наборов?
- 27. Какова цель python setuptools?
- 28. Какова цель «pm2 save»?
- 29. Какова цель метода _createElement?
- 30. Какова цель character_set_connection?
Это домашнее задание. – user43389
Его основное использование, вероятно, в метапрограммировании шаблонов, но оно будет в значительной степени варьироваться в зависимости от ваших потребностей (чего мы не можем догадаться). – edmz