C ++ Boost Range.Массив пар из массива - PullRequest
0 голосов
/ 21 декабря 2018

У меня есть массив целых чисел C и его размер, т.е. int* arr, unsigned size.Я хочу иметь что-то похожее на что-то, что будет содержать пары элементов в качестве элементов.

Чтобы уточнить, задача состоит в следующем: я получаю массив, подобный [1,2,3,4], и я хочу представление, которое будет выглядеть как [(1,2),(3,4)].

. Есть ли какой-нибудь удобный способ преобразования массива?таким образом, через повышение или, может быть, стандартные диапазоны?

Ответы [ 2 ]

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

С range v3 , вы можете создать диапазон с диапазоном размера 2 с помощью ranges::v3::view::chunk(2)

или создать кортеж:

auto r = ranges::view::counted(p, size);
auto even = r | ranges::view::stride(2);
auto odd = r | ranges::view::drop(1) | ranges::view::stride(2);
auto pairs = ranges::view::zip(even, odd);

Demo

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

Вы можете использовать range-v3, он имеет span для просмотра необработанного массива и view::chunk для группировки смежных элементов:

#include <iostream>
#include <range/v3/view/chunk.hpp>
#include <range/v3/span.hpp>
#include <range/v3/algorithm/for_each.hpp>

namespace view = ranges::view;

int main() {
    int vec[] = { 1, 2, 3, 4, 5, 6 };
    ranges::span<int> s(vec, sizeof(vec)/sizeof(vec[0]));

    ranges::for_each(s | view::chunk(2), [] (auto chunk) {
                std::pair pr{chunk.at(0), chunk.at(1)};

                std::cout << pr.first << " " << pr.second << "\n";
            });
}

Live Demo

...