Параллельный for.

pavelkolodin
pavelkolodin

Есть 3 контейнера: a, b, c. Хочу запустить 1 range-цикл по ним всем одновременно:

for( auto i1 : a, auto i2 : b, auto i3 : c) {
    
}


На каждой итерации i1, i2, i3 имеет очередное значение из соответствующего контейнера.
Цикл помирает как только исчерпается самый мелкий контейнер.

Пример:

std::vector<int> a = {1, 2, 3};
std::vector<std::string> b = {"hello", "world", "foo", "bar"};
std::vector<int> c = {9, 8, 7, 6, 5, 4, 3, 2, 1, 0};

// Loop will stop after 3 iterations, because 'a' have minumal size = 3.
for ( auto i1 : a, auto i2 : b, auto i3 : c ) {
    std::cout << i1 << ", " << i2 << ", " << i3 << "\n";
}


Output:

1, hello, 9
2, world, 8
3, foo, 7
-9
рейтинг
1 комментарий
Andrey Davydov
С помощью гипотетической функции (которая должна появиться в рамках Ranges TS) Ваш пример можно будет выразить так:
for (auto [i1, i2, i3] : std::zip(a, b, c)) {
std::cout << i1 << ", " << i2 << ", " << i3 << "\n";
}
Andrey Davydov
Другие идеи
Группа создана, чтобы собирать предложения к стандарту C++, организовывать их внутренние обсуждения, помогать готовить их для отправки в комитет и защищать на общих собраниях в рабочей группе по С++ Международной организации по стандартизации (ISO).
Все предложения