С точки зрения доступа к кэшу случай 2 явно худший: он перезагрузит память в кэш 4 раза.
случай 3 такой же, как случай 1 при заполнении данных, но может быть хуже для последующего использования(при условии, что a b c d
связаны и, вероятно, будут прочитаны вместе).
Этот вариант даже лучше, чем в случае 1:
for (vector<something>::iterator it = vec.begin(); it != vec.end(); ++it)
{
it->a = e1;
it->b = e2;
it->c = e3;
it->d = e4;
}
То, что будет быстрее, зависит от многих вещей.Например, вычисление сложных выражений в неправильном порядке может быть намного хуже, чем любые пропуски кэша.Вы никогда не должны делать чисто теоретический выбор без реального профилирования.