【问题标题】:Finding a substring passing only 2 iterators?找到仅通过 2 个迭代器的子字符串?
【发布时间】:2013-05-12 22:12:56
【问题描述】:

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

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

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

模式

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

不允许 value 是字符串。

strstr(start, value);

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

我可以避免分配吗?

【问题讨论】:

  • 我不太明白你的问题,但std::search 会搜索另一个范围内的范围。
  • 刚刚找到谢谢 :)

标签: c++ algorithm boost stl


【解决方案1】:
std::search(begin, end, pat_begin, pat_end);

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

【讨论】:

  • 关于什么的建议?
  • 为了?我还是不太明白你的问题,抱歉。似乎有一个找到子字符串的问题,可以通过std::search 解决,然后还有一些关于缓冲区的问题 - 为什么不使用your_string result(std::search(begin, end, pat_begin, pat_end), end, allocator);,其中your_stringbasic_string 的实例化与您的自定义分配器?
猜你喜欢
  • 1970-01-01
  • 2021-10-02
  • 1970-01-01
  • 2015-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-09
  • 2012-10-23
相关资源
最近更新 更多