这两个完全相同吗 --> "lower_bound(inc.rbegin(), inc.rend(), i , Greater<int>())" & "lower_bound(dec.begin(), dec.end(),我,更大<int>())”

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

如果我有 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 最近的一篇内容中,一个被接受,而另一个没有。

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

从算法

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

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

end()
/
rend()
迭代器。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.