0

我有一个奇怪的问题。我的修复进入了一些高性能库。我的任务之一是将接口更改为使用内部字符串描述符格式,该格式是指针和长度,而不是参数的标准字符串。然而,其中一个函数在该字符串中搜索并找到一个模式,并将该模式​​之后的其余字符串复制到缓冲区中。

我添加了将整个迭代器范围分配到缓冲区中的更改{ std string 的自定义分配器版本},然后将所有字符擦除到模式中。修复被拒绝,说我可以做得更好。

我目前的问题是这个。我的输入字符串本质上是一对迭代器。我可能拥有也可能不拥有结束迭代器指向的字节,即我无法安全地取消引用它。

图案

std::find(start, end, value);

不允许 value 是字符串。

strstr(start, value);

接受一个以空结尾的字符串。我的代码与提升有联系。是否有任何 boost 实用程序或 stl 算法采用 2 个字符串迭代器并返回一个指向字符串模式的第一个字节的迭代器。当然。有一种脑死的解决方案,即创建一个临时字符串然后重新分配。

我可以避免分配吗?

4

1 回答 1

0
std::search(begin, end, pat_begin, pat_end);

为我做这项工作。如果可能,请提供更多建议。

于 2013-05-12T22:22:27.303 回答