Что лучше проверить, если символ существует в std :: string?find или find_first_of? - PullRequest
0 голосов
/ 11 декабря 2018

std::string имеет две разные функции-члены, которые делают одно и то же:

size_type find( CharT ch, size_type pos = 0 ) const noexcept;
size_type find_first_of( CharT ch, size_type pos = 0 ) const noexcept;

Если я хочу проверить, существует ли символ в std::string, какая из них предпочтительнее с точки зрения производительности?

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Они в значительной степени идентичны.Но не делать точно то же самое в каком-то конкретном случае, и это зависит от того, какую библиотеку std вы используете.

Я использую то, что называется EWL, (скорее всего, никто не использует это больше) в этой библиотеке string::find() и string::find_first_of одинаковы.

Но разные библиотеки имеют разные истории,В какой-то библиотеке, например Gnu, C ++ 2a, если вы ищете пустую строку из пустой строки, std::find() возвращает позицию 0. Однако std::find_first_of() возвращает std::string::npos.Они правильные или неправильные, зависит от ваших разных взглядов.

Этот вопрос обсуждается здесь .

0 голосов
/ 11 декабря 2018

Это не имеет значения.Они делают то же самое.

Мол, буквально. libstdc ++ просто делегирует find_first_of(char, size_t) на find(char, size_t), , как и libc ++ , а также MSVS 2015 (спасибо roalz).Нет никакой причины для какой-либо реализации делать иначе.

Я не совсем понимаю, почему эта перегрузка find_first_of вообще существует;это может быть просто для симметрии с find (что делает что-то другое, когда вы используете другие перегрузки), но, честно говоря, это просто сбивает меня с толку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...