Это вряд ли идиоматично, поскольку новый стандарт даже не сработает!
варьировались-за в C ++ 11 будет очень лаконичным и полезным, конечно. Насколько я понимаю, как это работает, он ищет "контейнеры"begin
а такжеend
пытаясь * аргумент-зависимый-поиск "(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()
только?Редактировать: исправление ошибкиЗначение против итератора