C++在固定大小为9的右边填充空终止字符数组中查找第一个空格的最快方法

chr*_*irk 1 c++ string templates find

字符串的平均长度为4个字符.我认为二进制搜索可能是从第4位开始最快的.另外我认为内联模板化函数可能表现良好.这是在一个非常紧凑的循环中完成的,因此性能至关重要.

数据看起来像:

"1234    "
"ABC     "
"A1235   "
"A1235kgo"
Run Code Online (Sandbox Code Playgroud)

seh*_*ehe 10

char* found = std::find(arr, arr+9, ' ');
Run Code Online (Sandbox Code Playgroud)

请注意,结束迭代器发出'不匹配'的信号:

bool match = (arr+9) != found;
Run Code Online (Sandbox Code Playgroud)

注意

  • 二进制搜索不适用,除非您的字符是某种已知的顺序.
  • std :: find是内联的,模板化的,如果启用优化,将执行最大值(例如,-O3 -march=native对于g ++)

编辑,因为你已经显示了更多的代码,我现在意识到你实际上想要检测(子)字符串长度.你可以用

当然,假设您希望将char []转换为std :: string用于此目的.实际上,这可能是一个非常有效的想法,因为在几乎所有C++标准库的实现中都发现了SSO(小字符串优化).(参见Herb Sutter的更多例外C++中的第 13-16项,或Scott Meyers关于Effective STL中商业std :: string实现的讨论).

  • @chriskirk:是的,但如果它实际上是在前几个字符中,那么你将失去你想要获得的所有表现.此外,分支指令可以缓解CPU流水线操作,因此您将无法接近标准线性(SSE)字符串操作的性能._当然,你可以尝试一下,如果你已经认为你知道答案的话......:)_ (2认同)