查找只传递2个迭代器的子字符串

Finding a substring passing only 2 iterators?

本文关键字:字符串 迭代器 2个 查找      更新时间:2023-10-16

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

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

我现在的问题是。我的输入字符串实际上是一对迭代器。我可能拥有也可能不拥有end迭代器所指向的字节,也就是说,我不能安全地解引用它。

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

不允许value为字符串。

strstr(start, value);

接受一个以空结尾的字符串。我的代码有链接,以促进。是否有boost实用程序或stl算法接受两个字符串迭代器并返回指向字符串模式的第一个字节的迭代器?当然可以。有一个脑残的解决方案,创建一个临时字符串,然后重新分配。

我可以避免分配吗?

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

为我做了这项工作。如有可能,请多提建议