【发布时间】:2016-01-06 13:05:02
【问题描述】:
有一个upper_bound(),返回一个迭代器到第一个大于大于val的元素。
有一个lower_bound(),返回一个迭代器到第一个不小于小于val的元素。
是否有一种算法可以将迭代器返回到不大于大于 val 的第一个元素,或者我必须重新发明轮子?
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
int main()
{
std::vector<int> data = { 1, 1, 2, 3, 3, 3, 3, 5, 5, 6 };
auto lower = std::lower_bound(data.begin(), data.end(), 4, [](int x, int y) {return x > y;});
cout << *lower ;
}
输出:1,扩展 3
请注意,像 std::greater<> 这样的另一个谓词不起作用。
【问题讨论】:
-
如何为
lower_bound使用不同的谓词,例如std::greater<>? -
使用
reverse_iterator... -
或
upper_bound(..) - 1 -
@Jarod42,看来不错,谢谢
-
@Jarod42
upper_bound()与前向迭代器一起使用,因此在某些情况下可能不起作用