Почему действительно представляет в виде строки:: найти возврат size_type и не итератор?

В C++, почему делает string::find вернуть size_type и не iterator?

Это имело бы смысл потому что функции как string::replace или string::insert возьмите итераторы в качестве входа, таким образом, Вы могли find некоторый символ и сразу передает возвращенный итератор replace, и т.д.

Кроме того, std::find возвращает итератор - почему std::string::find отличающийся?

24
задан Frank 17 June 2010 в 13:22
поделиться

4 ответа

Я предполагаю, что это потому, что в общем случае члены строк работают с индексами, а не с итераторами, и это упрощает использование возвращаемого значения. Вы всегда можете использовать std::find, если хотите получить итератор.

0
ответ дан 28 November 2019 в 23:48
поделиться

Дизайн нового блестящего класса строк стандартной библиотеки был уже готов, когда Строуструп познакомил комитет по стандартизации с STL. Комитету понравилась STL, и он начал включать ее в стандарт, тем самым адаптируя многое из того, о чем они уже договорились (и, вероятно, также задерживая стандарт еще на год или два).

Среди прочих изменений, итераторы были добавлены к уже готовому классу string как нечто само собой разумеющееся. Вы можете увидеть это, посмотрев на различные члены string, принимающие/возвращающие позицию - это дикая смесь индексов и итераторов.

Не всегда легко догадаться, почему некоторые функции-члены имеют только версии, принимающие индексы, а некоторые - еще и версии, принимающие итераторы. В случае с std::basic_string<>::find(), однако, это кажется простым: поскольку std::find() уже возвращает итератор, std::basic_string<>::find() оставили как есть.

26
ответ дан 28 November 2019 в 23:48
поделиться

Все строковые функции работают с индексами, некоторые функции (например, replace() и insert()) просто дополнительно поддерживают итераторы. Поэтому результат find() может напрямую использоваться в этих функциях. Поскольку не может быть двух функций find(), отличающихся только типом возвращаемого результата (одна возвращает итератор, другая - индекс), пришлось выбрать одну.

3
ответ дан 28 November 2019 в 23:48
поделиться

Возможно, полезнее получить число из find, потому что тогда вы сможете использовать [] оператор или substr(), чтобы добраться до символов, которые вы только что искали.

Также, если вам нужен итератор, вы всегда можете сделать begin() + pos

7
ответ дан 28 November 2019 в 23:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: