为什么C++ lower_bound()允许返回指针等效于val,而upper_bound()则不允许

Joh*_*Tan 2 c++ stl

我读了C++ upper_bound()函数和lower_bound()函数的描述.有趣的是,upper_bound()只返回值> val的第一个迭代器(如果找不到val,则返回[first,last]范围内的最后一个迭代器).

实现与lower_bound()不同,而它返回的第一个迭代器不是小于零,因此它允许返回指针等效于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;
Run Code Online (Sandbox Code Playgroud)

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

Moo*_*uck 5

在C++中,迭代器通常成对使用.第一个迭代器指向要考虑的第一个元素,最后一个迭代器指向要考虑的最后一个元素.这是为了简化循环:

for(it cur=first; cur!=last; cur++)
Run Code Online (Sandbox Code Playgroud)

因此,lower_bound并且upper bound一起形成"所有元素的范围等于您搜索的项目.std::equal_range返回的相同范围.