c++ - 为什么 C++ lower_bound() 允许返回等于 val 的指针而 upper_bound() 不允许

标签 c++ stl

我阅读了 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;

http://www.cplusplus.com/reference/algorithm/lower_bound/

最佳答案

在 C++ 中,迭代器通常成对工作。第一个迭代器指向要考虑的第一个元素,最后一个迭代器指向要考虑的最后一个元素。这是为了使循环更容易:

for(it cur=first; cur!=last; cur++)

因此,lower_boundupper bound 一起形成一个“所有元素的范围等于您搜索的项目。与 std 相同的范围: :equal_range 返回。

关于c++ - 为什么 C++ lower_bound() 允许返回等于 val 的指针而 upper_bound() 不允许,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40809275/

相关文章:

c++ - 检索数字短语

c++ - 开始为 jack-audio 开发

c++ - std::map 与 std::unordered_map 迭代值类型的差异

c++ - 继承自定义类的 std::vector::iterator?

C++ 在构造函数中删除对象?

c++ - 从多个线程使用 stdlib 的 rand()

javascript - 在QtWebkit中,如何设置从C++到Javaobject窗口的回调?

c++ - 如何在模板类中重载 less 运算符以供排序算法使用?

c++ - std::vector 适用于不可默认构造的类?

c++ - 无符号字符数组作为映射中的键 (STL - C++)