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
中是否存在某个字符,从性能上考虑,哪个是首选?
答案 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进行了讨论。