Почему string :: begin существует? - PullRequest
2 голосов
/ 18 апреля 2020

Если я правильно понимаю, string::begin возвращает указатель на первый элемент в строке. Если это так, почему бы нам просто не использовать &str для получения указателя.

Существуют ли ситуации, когда использование begin лучше или я неправильно понял его функцию?

Ответы [ 2 ]

5 голосов
/ 18 апреля 2020

Если я правильно понимаю, string::begin возвращает указатель на первый элемент в строке.

Нет, он возвращает итератор на первый элемент в строке. Это помогает сделать std::string совместимым с языковыми конструкциями (шаблонами), предназначенными для работы со стандартными контейнерами.

, почему бы нам просто не использовать &str для получения указателя.

С одной стороны, это не адрес первого элемента строки? Предполагая, что str является переменной типа std::string, это будет адрес объекта, который, помимо прочего, (часто) содержит указатель на первый элемент строки. (Если вы имели в виду функцию-член c_str(), то это можно сделать, но это не особо понятный и читаемый синтаксис.)

3 голосов
/ 18 апреля 2020

std::string::begin() возвращает итератор для первого символа строки. Итераторы являются обобщением указателей и действуют как связующее звено между контейнерами и алгоритмами, поэтому их можно разделить.

...