#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
Комментариев нет:
Отправить комментарий