Based on advice from some time back, I write algorithms to use iterators rather than index-based loops. Often, this requires jumping through considerable hoops. I'm just wondering, with current gcc loop optimizations, it this advice still relevant? For example: < iterator style loop > for (; i != end (container); ++i) do something with (*i); < index style loop > for (int i = 0; i < size (container); ++i) do something with container[i]; Is there (in general) a difference in speed for these 2 styles? What about if the containers are multi-dimensional and loops are nested?