以一种良好的 STL 风格检查一个范围是否是另一个范围的子范围

Arm*_*yan 5 c++ stl c++11

假设我们有两个范围r1 = [first1, last1)并且r2 = [first2, last2)

假设这r2是iff的一个子范围r1,存在这样的i>=0情况:

  1. [first1 + i, first1 + i + last2 - first2)是一个有效范围

  2. [0, last2 - first2)对于以下保持中的所有 j :

    *(first1 + i + j) == *(first2 + j)
    
    Run Code Online (Sandbox Code Playgroud)

嵌套循环可以轻松确定 是否r2是 的子范围r1,甚至是一个对std::equal模板进行嵌套调用的循环。是否有更 STL 风格、更简洁的方式在 C++ 中表达相同的想法?C++0x 解决方案也受到欢迎。提前致谢。

Mar*_*k B 4

我想std::search这就是你要找的。来自http://www.cplusplus.com/reference/algorithm/search/ [ std::search] "在范围 [first1,last1) 中搜索 [first2,last2) 定义的序列的第一次出现,并返回一个迭代器到其第一个元素。”