Załóżmy że 2 (lub więcej) pojemników I mają iterację jednocześnie - na przykład, do obliczania iloczyn skalarny dwóch wektorów:zakres dla pętli z wielu pojemników
std::vector<double> vector1;
std::vector<double> vector2; // identical size to vector1
co jest korzystne C + +11 sposób na jednoczesne określenie pętli zasięgu dla obu (lub wszystkich) kontenerów? Czy wymaga to wyboru jednego kontenera/iteratora, aby pisać krótko (tj. for (auto i : c)
) w pętli zasięgu, podczas gdy wszystkie inne pojemniki/iteratory muszą być obsługiwane przez długi czas? Czy jest jakiś powód składnia w przyszłości nie może zostać przedłużony do obsługi krótkiej ręki zarówno/wszystkie pojemniki, jak pokazano poniżej ... co wydaje się bardzo czytelny:
double dotProduct(0.0);
for (auto const & value1 : vector1, auto const & value2 : vector2) // illegal!
{
dotProduct += value1*value2;
}
Możliwy duplikat [Jaki jest najlepszy sposób na powtórzenie dwóch lub więcej kontenerów jednocześnie] (http://stackoverflow.com/questions/12552277/whats-the-best-way-to-iterate-over-two-or -więcej-kontenerów-jednocześnie) – ildjarn
Na powierzchni tak ... ale czy którakolwiek z odpowiedzi tam jest (a) czytelna i (b) ogólna i (c) oparta na standardowym C++? Nie to, co widziałem. Od wczesnych dni C, można napisać 'dla (i = 0, j = 0, k = 0; i
omatai
Spójrz na [mitera] (https://github.com/ClaasBontus/miterator). Łatwiej będzie z zakresami, które nie będą przed C++ 20. –