Предположим, что у меня есть 2 (или более) контейнеров хочу перебирать одновременно - например, чтобы вычислить скалярное произведение двух векторов:Диапазон для цикла с несколькими контейнерами
std::vector<double> vector1;
std::vector<double> vector2; // identical size to vector1
Что является предпочтительным С + +11 способ задать цикл диапазона для обоих (или всех) контейнеров одновременно? Включает ли это выбор одного контейнера/итератора для записи короткого замыкания (т. Е. for (auto i : c)
) в цикле диапазона, в то время как все остальные контейнеры/итераторы должны обрабатываться долго? Есть ли какая-либо причина синтаксис в будущем не может быть расширен для поддержки стенографии для обоего/всех контейнеров, как показано ниже ..., который, кажется, действительно читает:
double dotProduct(0.0);
for (auto const & value1 : vector1, auto const & value2 : vector2) // illegal!
{
dotProduct += value1*value2;
}
Возможный дубликат [Каков наилучший способ повторения двух или более контейнеров одновременно] (http://stackoverflow.com/questions/12552277/whats-the-best-way-to-iterate-over-two-or -более-контейнеры одновременно) – ildjarn
На первый взгляд, да ... но есть ли какие-либо ответы там (а), читаемые и (б) общие и (в) на основе стандартного C++? Не то, чтобы я видел. С первых дней C можно было написать 'for (i = 0, j = 0, k = 0; i
omatai
Посмотрите на [miterator] (https://github.com/ClaasBontus/miterator). Все станет проще с диапазонами, которые не будут до C++ 20. –