Как реализовать Python-подобную нарезку в C ++ 20 Ranges TS? - PullRequest
0 голосов
/ 05 декабря 2018

Диапазоны TS объединены в C ++ 20.Мне было интересно, как лучше реализовать Python-подобные операции срезов с этим предложением?Чтобы быть конкретным, предположим, что a является vector<int>, как реализовать:

  • a[:5] (первые 5 элементов)
  • a[5:] (от 5-гоэлементы до конца)
  • a[2:4] (2-й и 3-й элементы)
  • a[2::-1] (a [2], a [1], a [0])
  • a[4:1:-2] (a [4], a [2])

1 Ответ

0 голосов
/ 06 декабря 2018

Вот все фрагменты, которые я смог найти, чтобы соответствовать вашим примерам, пожалуйста, примите их как подсказки, как использовать текущую реализацию TS.

std::vector<int> elements{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};

// First five elements
std::vector<int> a = elements | ranges::view::take(5);

// From the 5-th elements to the end
std::vector<int> b = elements | ranges::view::drop(5);

// The 2nd and 3rd elements
std::vector<int> c = elements | ranges::view::slice(2, 4);

// The first 3 elements, in reverse
std::vector<int> d = elements | ranges::view::take(3) | ranges::view::reverse;

// Elements 2-4 inclusive, reversed, and then taking every 2nd element
std::vector<int> e = elements | ranges::view::slice(2, 5) | ranges::view::reverse | ranges::view::stride(2);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...