性能比较:strstr()与std::string::find()



有人能解释一下为什么我应该使用strstr或string find()吗?哪一个更快,在哪里?

在C++中应该使用std::string::find(),在C中应该使用strstr()。性能上的差异不应该很大。

哪个更快并不重要。更重要的是std::string::find是安全的。因此,如果要使用c++,请使用std::string类,并避免使用旧的c函数。

我已经对字符串中搜索子字符串的几个版本进行了基准测试。

标准为c++20/-O3的GCC 10.3显示以下结果:

  • strstr是最快的
  • std::string::find慢3倍
  • std::搜索速度慢4.5倍
  • std::string_view::find慢11倍

Clang 12:

  • strstr是最快的
  • std::string::find慢3倍
  • std::搜索速度慢5.5倍
  • std::string_view::find慢8.5倍

因此,如果您确实关心性能,请使用strstr。

比较两个不完成相同任务的函数的性能实际上没有意义:strstr返回指向子字符串的指针,而find返回子字符串的位置。

例如,如果您需要提取子字符串:

char* s1 = strstr(SeqInWhichISearch, patternToSearch);

将相当于:

std::string s1 = SeqInWhichISearch.substr(SeqInWhichISearch.find(patternToSearch));

正如您所看到的,strstrsubstr+find所取代。。