我读了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)
在C++中,迭代器通常成对使用.第一个迭代器指向要考虑的第一个元素,最后一个迭代器指向要考虑的最后一个元素.这是为了简化循环:
for(it cur=first; cur!=last; cur++)
Run Code Online (Sandbox Code Playgroud)
因此,lower_bound并且upper bound一起形成"所有元素的范围等于您搜索的项目.std::equal_range返回的相同范围.
| 归档时间: |
|
| 查看次数: |
395 次 |
| 最近记录: |