繁体   English   中英

C ++ STL:将空容器传递给lower_bound

[英]C++ STL: Passing an empty container to lower_bound

将空容器传递给std::lower_bound的行为是否已定义?

我检查了cppreference.com和我在网上找到的旧版C ++标准,但找不到明确的答案。

std::deque::erasecppreference.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 < valuecomp(*j, value) != false

现在:

  1. 空容器的[first, last]范围有一个成员,即由其成员函数end()返回的迭代器。
  2. 因此i只能end()
  3. 只有一个可行的范围[first, i) ,即[end, end())
  4. 此范围为空,因为没有元素大于或等于 end()并且同时低于 end()

由于没有每个迭代器j ,我猜引用的句子可以重写为:

返回: [first, last]范围内最远的迭代器i

这意味着只有i可以返回的是end()

std :: lower_bound回答了这个问题,“Where(就像在迭代器值之前)是第一个可以插入给定元素而不违反排序的地方?”如果给定的[ first,last ]范围为空,则只有在最后一个位置插入任何东西(等于第一个 ),所以这就是lower_bound返回的内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM