如果我有 2 个向量,一个按递增顺序,另一个按递减顺序:
vector<int> inc{1,2,3,4,6,7}, dec{7,6,4,3,2,1};
以下 2 个表达式总是给出相同的结果吗?或者说,它们的工作方式有什么不同吗?
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()
迭代器。
一个细微的差别可能在于速度。我预计使用反向迭代器的版本会慢一点,但我还没有测量过。
因此,除了返回的迭代器类型的差异以及可能一个比另一个慢之外,您将从两个版本中获得相同的值。