【发布时间】:2013-05-12 22:12:56
【问题描述】:
我有一个奇怪的问题。我的修复进入了一些高性能库。我的任务之一是更改接口以使用内部字符串描述符格式,该格式是指针和长度,而不是参数的 std 字符串。然而,其中一个函数在该字符串中搜索并找到一个模式,并将该模式之后的其余字符串复制到缓冲区中。
我添加了将整个迭代器范围分配到缓冲区中的更改{ std string 的自定义分配器版本},然后将所有字符擦除到模式。修复被拒绝,说我可以做得更好。
我目前的问题是这个。我的输入字符串本质上是一对迭代器。我可能拥有也可能不拥有结束迭代器指向的字节,即我无法安全地取消引用它。
模式
std::find(start, end, value);
不允许 value 是字符串。
strstr(start, value);
采用以空字符结尾的字符串。我的代码与提升有联系。是否有任何 boost 实用程序或 stl 算法采用 2 个字符串迭代器并返回一个指向字符串模式的第一个字节的迭代器。当然。有一种脑死的解决方案,即创建一个临时字符串然后重新分配。
我可以避免分配吗?
【问题讨论】:
-
我不太明白你的问题,但
std::search会搜索另一个范围内的范围。 -
刚刚找到谢谢 :)