哪个更好检查一个字符是否存在于std :: string中? find或find_first_of?

问题描述 投票:0回答:2

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中,哪个字符在性能方面是首选?

c++ string algorithm performance stl
2个回答
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对称(当你使用其他重载时会做一些不同的事情),但说实话,这对我来说似乎有些困惑。


0
投票

它们非常相似。但是在某些特定情况下并没有做同样的事情,这取决于你正在使用的std库。

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

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

here讨论了这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.