Скажем, у меня есть контейнер c
типа, который предоставляет метод size()
, и я хочу перебрать этот контейнер при отслеживании каждого индекса элемента:
for (/*TODO*/ i = 0; i < c.size(); i++) {...}
В пост-С++ 11 мире, где автоматический вывод типа решает так много проблем. Что мы должны использовать вместо TODO
выше? Единственное, что кажется мне правильным, независимо от типа size()
, заключается в следующем:
for (decltype(c.size()) i = 0; i < c.size(); i++) {...}
Но это кажется слишком многословным и, на мой взгляд, не помогает читабельности.
Другим решением может быть следующее:
for (auto end = c.size(), i = 0; i < end; i++) {...}
Но это также не помогает читабельности и, конечно же, не имеет той же семантики, что и исходный фрагмент.
Итак, мой вопрос: какой лучший способ вывести тип индексной переменной цикла, учитывая только тип ограничения индекса.