查找一个区域中未包含在另一个区域中的第一个元素

find first element within a range not included in another range

本文关键字:区域 另一个 第一个 元素 包含 一个 查找      更新时间:2023-10-16

在STL中,我可以使用std::includes来检查第二个范围是否完全包含在第一个范围中。

对 2 个范围进行排序。

 std::includes( r1.begin(), r1.end(), rng2.begin(), r2.end()); // returns a bool

如果我想要发生此故障的确切点,该怎么办?

本质上,我正在寻找 r2 中不包含在 r1 中的第一个元素或返回迭代器的东西。

我找不到任何 STL 算法。

我是否必须使用find或已经有一些东西来编写自己的代码?

基于

std::set_difference我写了这样的东西:

/*
* first difference of elements: element present in first container
* and not present in second
*/
template <class T>
T first_difference (T* first1, T* last1,
                                 T* first2, T* last2)
{
  while (first1!=last1 && first2!=last2)
  {
    if (*first1<*first2) { return *first1; }
    else if (*first2<*first1) ++first2;
    else { ++first1; ++first2; }
  }
  if ( first1 != last1 && first2 == last2) return *first1;
  return 0;
}

用法:

int main(int argc, char** argv) {
    int first[] = {5, 10, 15, 20, 25};
    int second[] = {50, 40, 30, 20, 10};
    std::sort(first, first + 5); //  5 10 15 20 25
    std::sort(second, second + 5); // 10 20 30 40 50
    int i = first_difference( first, first + 5, second, second + 5);
    assert( i == 5);
    return 0;
}
相关文章: