Страницы

Поиск по вопросам

четверг, 19 декабря 2019 г.

Разница между begin и cbegin

#cpp


В чём разница между begin и cbegin, end и cend и т.д.?
    


Ответы

Ответ 1



Методы с префиксом c возвращают константные итераторы. Это означает, что Через них нельзя изменять значения. А ещё их можно использовать с константными объектами.

Ответ 2



До c++11 в Стандарте языка не было функций-членов cbegin, cend для контейнерных классов. Были просто соответствующие перегрузки функций begin, end, которые возвращали Containter::iterator для неконстантных объектов и Containter::const_iterator для константных объектов. С выходом Стандарта c++11 ситуация изменилась. Т.е. если нам однозначно нужен константный итератор (независимо от константности контейнера) следует выбирать cbegin/cend. Если контантность итератора не важна - можно использовать begin/end, правильная перегрузка будет выбрана на основании наличия/отсутствия константности контейнера. Необходимость добавления cbegin/cend была обусловлена в том числе и появлением возможности выводить тип переменной на основании типа правостороннего выражения: auto it = c.begin(); // it будет типа const_iterator или iterator в зависимости от типа 'c' auto it = c.cbegin(); // it всегда будет иметь тип const_iterator

Комментариев нет:

Отправить комментарий