2 и 3 по существу идентичны. 1 может быть быстрее, потому что он выполняет один вызов функции за итерацию, тогда как 2 и 3 выполняют два вызова функции за итерацию. С другой стороны, некоторые вызовы функций могут быть встроены. Единственный способ действительно сказать, это измерить.
Кроме того, поскольку вы добавляете лямбда-функции (C ++ 0x), почему бы не добавить в ваши измерения циклы на основе диапазона:
for (var iter : enemies) { iter->prepare(time_lapsed); }
конечно, если ваш компилятор их поддерживает.
РЕДАКТИРОВАТЬ: я только что заметил тег vc ++ 2010. К сожалению, ваш компилятор пока не поддерживает их: - (