![](/img/trans.png)
[英]custom comparator in lower_bound() stl function in c++
[英]C++ STL: Passing an empty container to lower_bound
将空容器传递给std::lower_bound
的行为是否已定义?
我检查了cppreference.com和我在网上找到的旧版C ++标准,但找不到明确的答案。
std::deque::erase
的cppreference.com文档有一个句子
如果
first==last
,迭代器首先不需要是可解除引用的:擦除空范围是无操作。
我想念std::lower_bound
和其他算法这样的东西。
关于std::lower_bound(first, last)
的返回值的Cppreference :
“[它返回] Iterator指向不小于value的第一个元素, 如果没有找到这样的元素则指向
last
元素 。 ”
(强调我的)
在空范围内,将没有符合条件的元素,因此将返回last
。
由此得出结论,在空范围上应用std::lower_bound
(和类似的)是明确定义的 。 它什么都不做, last
返回,等于first
。
标准说 :
返回:最远迭代
i
在范围[first, last]
,从而使每一迭代j
范围[first, i)
下列相应条件成立:*j < value
或comp(*j, value) != false
。
现在:
[first, last]
范围有一个成员,即由其成员函数end()
返回的迭代器。 i
只能end()
。 [first, i)
,即[end, end())
。 end()
并且同时低于 end()
。 由于没有每个迭代器j
,我猜引用的句子可以重写为:
返回: [first, last]
范围内最远的迭代器i
。
这意味着只有i
可以返回的是end()
。
std :: lower_bound回答了这个问题,“Where(就像在迭代器值之前)是第一个可以插入给定元素而不违反排序的地方?”如果给定的[ first,last ]范围为空,则只有在最后一个位置插入任何东西(等于第一个 ),所以这就是lower_bound返回的内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.