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())
范围内。没有这样的迭代器符合定义中的要求。这个定义是不是很懒,没有明确说明在这种情况下会发生什么?
答案 0 :(得分:11)
SGI文档无关 - C ++标准是您应该阅读的内容。引用C ++11§25.4.3.2:
返回:范围
i
中的最远迭代器[first,last]
,以便j
范围内的任何迭代器[first,i)
具有以下相应条件暂停:!(value < *j)
或comp(value, *j) == false
。