Я хотел бы получить несколько предложений о наиболее кратком и «функциональном» способе сбора пар последовательных элементов из вектора (1-й и 2-й, 3-й и 4-й и т. Д.) С использованием современного C ++. Предположим, вектор произвольной, но четной длины. Для примеров, которые я собираю, я суммирую элементы каждой пары, но это не главная проблема. Я должен добавить, что буду использовать только STL, без Boost.
В Python я могу сжать их в 2 кортежа через итератор с
s = range(1,11)
print([(x + y) for x,y in zip(*[iter(s)] * 2)])
В Perl 5 я могу снимать пары с
use List::Util qw/pairs sum/;
use feature 'say';
@s = 1 .. 10;
say sum @$_ foreach (pairs @s);
В Perl 6 я могу поместить их по два в блок с
my @s = 1 .. 10;
for @s -> $x, $y { say $x + $y; }
и в R я могу обернуть вектор в массив из 2 столбцов и суммировать строки с помощью
s <- 1:10
print(apply(matrix(s, ncol=2, byrow=TRUE), 1, sum))
Я не владею C ++, и мое решение использует for(;;)
. Это слишком похоже на C.
#include <iostream>
#include <vector>
#include <numeric> // std::iota
int main() {
std::vector<int> s(10);
std::iota(s.begin(), s.end(), 1);
for (auto p = s.cbegin(); p != s.cend(); p += 2)
std::cout << (*p + *(p + 1)) << std::endl;
}
Выводом, конечно, должен быть какой-то вариант
3
7
11
15
19