gpt4 book ai didi

c++ - 在 adjacent_find 中使用 greater_equal 来查找排序序列中的等价元素

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:27:12 26 4
gpt4 key购买 nike

使用std::greater_equal是UB吗?在 std::adjacent_find在排序范围内找到等效(与相等相反)元素的算法?

如果 std::greater_equal<>{}(*prev, *next)prevnext 元素的顺序,答案可能是“否”算法的内部实现没有严格规定。

std::container<int> c{1, 2, 3, 3, 4, 5};
assert(std::is_sorted(std::cbegin(c), std::cend(c));
assert(std::adjacent_find(std::cbegin(c), std::cend(c), std::greater_equal<int>{}) != std::cend(c));

最佳答案

std::adjacent_find 搜索谓词返回 true 的两个连续元素。 C++ standard将行为记录为发现:

  • *i == *(i + 1) 用于没有参数的重载 pred
  • pred(*i, *(i + 1)) != false 用于带有参数的重载 pred

第二个项目符号指定元素传递给谓词的顺序。

这个示例实现 ( copied from cppreference.com ) 应该更清楚这一点。

template<class ForwardIt, class BinaryPredicate>
ForwardIt adjacent_find(ForwardIt first, ForwardIt last, BinaryPredicate p)
{
if (first == last) {
return last;
}
ForwardIt next = first;
++next;
for (; next != last; ++next, ++first) {
if (p(*first, *next)) { // <- predicate called here
return first;
}
}
return last;
}

关于c++ - 在 adjacent_find 中使用 greater_equal 来查找排序序列中的等价元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55650012/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com