让我们看看以下代码:
#include <iostream>
#include <vector>
#include <algorithm>
int main()
{
std::vector<int> exmpl = { 2, 3, 6, 9, 134, 1143, 2345 };
auto LessThan = [](const int a, const int b) -> bool { return a < b; };
auto GreaterThan = [](const int a, const int b) -> bool { return a > b; };
auto it_reverse_less_than = std::lower_bound(exmpl.rbegin(), exmpl.rend(), 8, LessThan);
auto it_reverse_greater_than = std::lower_bound(exmpl.rbegin(), exmpl.rend(), 8, GreaterThan);
auto it_forward_less_than = std::lower_bound(exmpl.begin(), exmpl.end(), 8, LessThan);
auto it_forward_greater_than = std::lower_bound(exmpl.begin(), exmpl.end(), 8, GreaterThan);
std::cout << *it_reverse_less_than << "\n";
std::cout << *it_reverse_greater_than << "\n";
std::cout << *it_forward_less_than << "\n";
std::cout << (it_forward_greater_than == exmpl.end());
return 0;
}
它提供以下输出:
2345
6
9
1
我使用VC ++编译器检查了结果,并通过Ideone检查了gcc(参见下面的链接),它们是相同的。
我认为it_reverse_greater_than
指向1143
,因为它是反向迭代器看到的比较函数返回false
的第一个元素。我不明白为什么GreaterThan
函数在与前向迭代器(it_forward_greater_than
指向end()
)一起使用时不返回匹配项。 it_forward_greater_than
不应指向2
,因为它是比较函数返回false
的第一个元素? it_reverse_greater_than
指向最后一个元素,即反向迭代器看到的第一个元素,这不是一个类比的情况吗?
以下是Ideone中的代码: https://ideone.com/0z55ss