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++ just delegates find_first_of(char, size_t)
to find(char, size_t)
,as does libc++和MSVS 2015(感谢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
。他们是对还是错取决于你有不同的观点。
here讨论了这个问题。