STL upper_bound的定义不一致?

时间:2012-03-12 20:15:44

标签: c++ stl

documentation for upper_bound州:

  

...它试图在有序范围内找到元素值[first,last] ... upper_bound返回[first,last]中最远的迭代器i,这样,对于[first,i]中的每个迭代器j ,价值< * j是假的。

但是,如果我们的vector<int> v包含数字1,2和3,则调用upper_bound(v.begin(), v.end(), 5)将返回v.end()。但根据定义,v.end()不在[v.begin, v.end())范围内。没有这样的迭代器符合定义中的要求。这个定义是不是很懒,没有明确说明在这种情况下会发生什么?

1 个答案:

答案 0 :(得分:11)

SGI文档无关 - C ++标准是您应该阅读的内容。引用C ++11§25.4.3.2:

  

返回:范围i中的最远迭代器[first,last],以便j范围内的任何迭代器[first,i)具有以下相应条件暂停:!(value < *j)comp(value, *j) == false