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

标签 c++ string templates find

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

数据如下:

"1234    "
"ABC     "
"A1235   "
"A1235kgo"

最佳答案

char* found = std::find(arr, arr+9, ' ');

请注意,结束迭代器会发出“不匹配”信号:

bool match = (arr+9) != found;

请注意,

  • 二分查找不适用,除非你的字符在一些已知的顺序中
  • std::find 是内联的、模板化的,如果您打开优化(例如,-O3 -march=native for g++),它将发挥最大作用

编辑 由于您展示了更多代码,我现在意识到您实际上想要检测(子)字符串长度。你可以使用

当然,这假设您想要将 char[] 转换为 std::string 。实际上,这可能是一个完全有效的想法,因为在几乎所有 C++ 标准库的实现中都可以找到 SSO(小字符串优化)。 (请参阅 Herb Sutter 的 More Exceptional C++ 中的第 13-16 项,或 Scott Meyers 在 Effective STL 中对商业 std::string 实现的讨论)。

关于C++ 在固定大小为 9 的右填充空终止字符数组中查找第一个空格的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8043390/

相关文章:

c++ - Boost Interprocess named_mutex 作为类成员

c++ - 无效转换 gcc -fpermissive

string - 为什么我不能在类定义中插入字符串?

mysql - Zabbix MySQL默认模板监控错误

c++ - 使用 getline c++ 将数据存储在 vector 中

尝试使用 C++ const 静态成员初始化数组时未识别

string - 从单元格中的字符串中删除重复项

带字符串操作的 C EXC_BAD_ACCESS

c++ - 专门化后的显式实例化

c++ - 为什么我在声明的函数上收到链接错误?