如果我有 2 个向量,其中一个按递增顺序,其他按递减顺序
vector<int> inc{1,2,3,4,6,7}, dec{7,6,4,3,2,1};
那么这两个总是给出相同的结果......或者它们的工作方式有什么不同吗:-
lower_bound(inc.rbegin(), inc.rend(), some_number, greater<int>()) // #1
和
lower_bound(dec.begin(), dec.end(), some_number, greater<int>()) // #2
我觉得它们是相同的,但在 Codeforces 最近的一篇内容中,一个被接受,而另一个没有。
从算法
std::lower_bounds
的角度来看,除了迭代器类型之外没有任何区别(一个是反向迭代器,另一个不是),但它并不关心这一点。
它将在两种情况下执行相同的算法步骤,并返回一个指向在两种情况下携带相同值的元素的迭代器 - 或
end()
/rend()
迭代器。
一个细微的差别可能在于速度。我预计使用反向迭代器的版本会慢一点,但我还没有测量过。
因此,除了返回的迭代器类型的差异以及可能一个比另一个慢之外,您将从两个版本中获得相同的值。