Компилятор С++ позаботится о таких случаях, как здания: vector:
for (int i = 0; i < buildings.size(); i++) {}
то есть он замечает, что здания изменены в цикле или нет, а затем основанный на том, что не оценивать его на каждой итерации? Или, может быть, я должен сделать это сам, не так красиво, но:
int n = buildings.size();
for (int i = 0; i < n; i++) {}