lower_bound() 对于升序向量的反向迭代器与降序向量的正向迭代器返回相同的结果吗?

问题描述 投票:0回答:1

如果我有 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 上的一场竞赛中,一个被接受,而另一个没有。

c++ algorithm binary-search lower-bound
1个回答
2
投票

从算法

std::lower_bounds
的角度来看,除了迭代器类型之外没有任何区别(一个是反向迭代器,另一个不是),但它并不关心这一点。

它将在两种情况下执行相同的算法步骤,并返回一个指向在两种情况下携带相同值的元素的迭代器 - 或

end()
/
rend()
迭代器。

一个细微的差别可能在于速度。我预计使用反向迭代器的版本会慢一点,但我还没有测量过。

因此,除了返回的迭代器类型的差异以及可能一个比另一个慢之外,您将从两个版本中获得相同的值。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.