Pytam ponieważ przeglądając internety natknąłem się na bardzo wiele sugerowanych sposobów, które nawet ja mogę na pierwszy rzut oka uznać za niezbyt optymalne algorytmicznie czy wydajnościowo, np pisane w stylu:
for (const auto X : mvr) // mvr = random vector<vector<int_fast8_t>>
{
cout << "[VECTOR] @ " << &X << endl;
for(const auto item : X)
{
printf("[ITEM] @ \t %p \n", &item);
}
}
To co mi się tutaj nie podoba to to że adresy pamięci są zawsze te same zarówno dla vectora jak i itemu w nim zawartego, czyli po prostu program tworzy nową kopie każdej zmiennej przy każdym jej użyciu no i to jest raczej b.słabe algorytmicznie, nie do końca wiem jakie są globalne wytyczne w c++ bo jeszcze mnie ta lektura przerasta, ale w np w pythonie coś takiego by nigdzie nie przeszło.
Jedyny sposób w jaki udało mi się zrobić to samo ale chyba już ciut wydajniej (2400 vs 3000 instrukcji cpu wg godbolt.org) to była klasyczna iteracja z C:
for (int V = 0 ; V < mvr.size() ; V++)
{ cout << endl;
for (int Y = 0 ; Y < 8 ; Y++)
{
printf("%i\t%p\n", mvr[V][Y], &mvr[V][Y]);
}
};
Więc główne pytanie brzmi, jak najlepiej przeiterować coś takiego (vector vectorów typu int_fast8_t użyty w przykładzie) w nowoczesnym C++, nie robiąc żadnych zbędnych operacji? Czy może jest to już na tyle szybki i zoptymalizowany język że nie powinienem w ogóle się tym przejmować i zostawić to kompilatorowi?