是否定义了将空容器传递给std::lower_bound
的行为?
我检查了cppreference.com和我在网上找到的旧版本的C ++标准,但找不到确切的答案。
cppreference.com documentation for std::deque::erase
有一个句子
如果
first==last
不需要首先取消迭代器的引用:删除空范围是无操作的。
对于std::lower_bound
和其他算法,我想念这样的东西。
答案 0 :(得分:8)
Cppreference关于std::lower_bound(first, last)
的返回值:
“ [返回] 指向不小于值的第一个元素的迭代器,或
last
(如果找不到这样的元素。”。)。
(重点是我的)
在空范围内,将没有满足条件的元素,因此将返回last
。
由此得出结论,在空白范围上应用std::lower_bound
(及类似内容)是定义明确的。它什么也不做,返回last
,它等于first
。
答案 1 :(得分:3)
返回:范围
i
中最远的迭代器[first, last]
,使得对于j
范围中的每个迭代器[first, i)
,以下对应条件按住:*j < value
或comp(*j, value) != false
。
现在:
[first, last]
具有单个成员,即其成员函数end()
返回的迭代器。i
只能end()
。[first, i)
,即[end, end())
。end()
且小于或等于end()
小于j
。由于没有每个迭代器i
,我猜引用的句子可以改写为:
返回:范围[first, last]
中最远的迭代器i
。
这意味着可以返回的唯一end()
是{{1}}。
答案 2 :(得分:2)
std :: lower_bound回答了以下问题:“在不违反顺序的情况下,可以首先插入给定元素的位置(如迭代器值之前)?”如果是[ first,last < / em>)范围是空的,唯一要插入任何内容的地方是在 last 之前(等于 first ),所以 lower_bound 返回。