检查std :: string中是否存在字符哪个更好?找到还是find_first_of?

时间:2018-12-11 12:20:29

标签: c++ string algorithm performance stl

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 :(得分:5)

没关系。他们做同样的事情。

实际上,就像。 libstdc++ just delegates find_first_of(char, size_t) to find(char, size_t)as does libc++和MSVS 2015(感谢roalz)。没有任何其他实现的理由。

我还不清楚为什么find_first_of的重载甚至存在;可能只是为了与find对称(当您使用其他重载时,这样做会有所不同),但是老实说,这似乎让我感到困惑。

答案 1 :(得分:0)

它们几乎相同。但是在某些特定情况下并没有做完全相同的事情,这取决于您使用的是什么标准库。

我正在使用一个叫做EWL的东西(很可能没有1个用户正在使用它)在该库string::find()string::find_first_of中是相同的。

但是不同的图书馆有不同的故事。在某些库中,例如Gnu,C ++ 2a,如果您从空字符串中搜索空字符串,则std::find()返回位置0。但是std::find_first_of()返回std::string::npos。他们是对还是错取决于您的不同看法。

该问题已here进行了讨论。