微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

在使用 std::transformback_inserter 之前检查向量是否为空是个好主意,否则不会发生任何错误,因为 vector.begin() 将与 {{ 相同1}} 并且不会在新向量中插入任何内容

解决方法

这是不需要的。如果 empty()true,那么 begin() == end()transform 将成为非操作,因为它在 [begin,end)

范围内工作 ,

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

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

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

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。