Новый ранжированный в C ++ 11, конечно, будет очень лаконичным и полезным.Насколько я понимаю, как это работает, он ищет «контейнеры» begin
и end
, пытаясь * Argument-Based-Lookup (ADT).
Но другойКроме того, все контейнеры теперь имеют cbegin()
и cend()
, чтобы получить const_iterators
для контейнера.
Я немного сбит с толку, с одной стороны, думаю, яследует использовать cbegin()
, если я не хочу изменить контейнер, с другой стороны, мне нужно добавить дополнительный const
внутри дальнего радиуса , чтобы получить то же самое.
Итак, это выглядит так:
// print all
for(const auto elem : data)
cout << elem
с использованием ADT и поиск data.begin (), поэтому необходимо const
.
против
// print everything but the first (a reason not to use range-for)
for(auto it = data.cbegin()+1; it!=data.cend(); ++it)
cout << *it
с использованием data.cbegin()
, поэтому const
не требуется.
Но не будет ли это более "идиоматическим"?:
// print everything but the first (a reason not to use range-for)
for(const auto it = data.begin()+1; it!=data.end(); ++it)
cout << *it
- Получил ли я"идиома", верно? Какие-нибудь дополнения?
- Когда я должен использовать
cbegin
? - Я что-то пропускаю с дальнобойным, ища только
begin()
?
Редактировать: Исправление ошибки Значениепротив итератора