我应该在使用std::transform之前检查向量是否为空

难道是一个好主意,检查一个向量为空或不使用之前std::transformback_inserter或可能没有错发生,因为vector.begin()会是一样的vector.end(),并不会插入任何新载体?

回答

这是不需要的。如果empty()true,则begin() == end()andtransform将成为非操作,因为它在范围内工作[begin, end)


回答

所有std算法都是空容器上的 noops。唯一有问题的是类似std::minmax(std::initializer_list),它要求它是非空的;它不返回迭代器,而是返回元素。

(请注意,在这种情况下,它需要一个列表,该列表通常就在 中{},因此如果它为空,通常很明显。)

在调用它们之前测试空的唯一原因应该是:

  1. 您将要对数据连续执行许多此类算法。

  2. 您希望能够通过断言、断点或日志轻松检测是否传递了一个空容器。

  3. 除了“什么都不做”之外,处理空数据的方式有一些不同(注意:这通常但不总是,表明您的设计存在缺陷)。


以上是我应该在使用std::transform之前检查向量是否为空的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>