Предположим, вы хотите знать числовой индекс элемента при итерации контейнера, который не предлагает итераторы произвольного доступа. Например:
std::list<std::string> items;
int i = 0;
for (auto & item : items) item += std::to_string(i++);
Есть ли более идиоматический или более хороший способ сделать это? Я предполагаю, что эта модель возникает в разных ситуациях. Мне не нравится, что индекс integer доступен вне цикла. Брекетинг цикла и определение индекса в локальном блоке тоже кажутся уродливыми.
Конечно, когда контейнер предлагает итераторы произвольного доступа, можно использовать разницу итераторов, но тогда вы не можете использовать диапазон для:
std::vector<std::string> items;
for (auto it = items.begin(); it != items.end(); ++it)
*it += std::to_string(it - items.begin());
Хотя я показываю только пример С++ 11, я ищу подсказки для С++ 0x и С++ 98.