我阅读了 C++ upper_bound() 函数和 lower_bound() 函数的说明。对我来说有趣的是 upper_bound() 只返回值 > val 的第一个迭代器(如果找不到 val,则返回 [first, last) 范围内的最后一个迭代器)。
实现与lower_bound()不同,它返回的第一个迭代器不小于val,所以它允许返回指针等于val。
我只是想知道以这种方式设计 upper_bound() 的目的是什么,upper_bound() 不得返回值等于 val 的迭代器?
例如:
vector<int> a = {1, 2, 3, 4};
auto i = lower_bound(a.begin(), a.end(), 2); // i is iterator at 2;
auto j = upper_bound(a.begin(), a.end(), 2); // j is iterator at 3;
最佳答案
在 C++ 中,迭代器通常成对工作。第一个迭代器指向要考虑的第一个元素,最后一个迭代器指向要考虑的最后一个元素。这是为了使循环更容易:
for(it cur=first; cur!=last; cur++)
因此,lower_bound
和 upper bound
一起形成一个“所有元素的范围等于您搜索的项目。与 std 相同的范围: :equal_range
返回。
关于c++ - 为什么 C++ lower_bound() 允许返回等于 val 的指针而 upper_bound() 不允许,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40809275/