检查std::字符串中是否存在字符哪个更好?find还是find_first_of



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中是否存在字符,那么就性能而言,首选哪一个?

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

就像,字面上。libstdc++只是将find_first_of(char, size_t)委托给find(char, size_t),libc++和MSVS2015也是如此(感谢roalz(。任何实现都没有理由采取其他方式。

我真的不清楚为什么find_first_of的过载会存在;它可能只是为了与find对称(当你使用其他重载时,它会做一些不同的事情(,但老实说,这对我来说似乎很困惑。

它们几乎完全相同。但在某些特定情况下不做完全相同的事情,这取决于您使用的std库。

我正在使用一个名为EWL的东西(很可能没有1再使用它了(,在该库中string::find()string::find_first_of是相同的。

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

这个问题在这里讨论。

最新更新