【问题标题】:Why does std::partition not have an out-of-place variant?为什么 std::partition 没有异地变体?
【发布时间】:2016-07-31 02:11:00
【问题描述】:

std::partition 很漂亮,但它是就地的; std::partition_copy 也不错,但它需要两个输出迭代器,即如果要使用相同的输出数组,则至少必须提前计算满足谓词的元素数。为什么<algorithm> 中没有不合适的std::partition 或单输出迭代器std::partition_copy

【问题讨论】:

  • 这比制作自己的副本和std::partitioning 有什么优势?
  • @user2357112: 性能?...不过,我想你可能会说,如果我关心性能,我不应该使用<algorithm> 代码开始。

标签: c++ algorithm partition c++-standard-library


【解决方案1】:

大概是因为该功能已经可以通过以下任一方式获得:

  • 复制原始容器并就地使用partition
  • 将单个目标容器调整为正确的大小,并使用begin()rbegin() 迭代器从前面和后面用partition_copy 填充它。

【讨论】:

  • 你的第二个建议是一个聪明的想法,我可能不会想到。
  • 这两个建议比组合操作需要更多的时间;至少你必须再迭代一次整个输入。这不是一个值得另一个变体的问题吗?此外,<algorithm> 中已经存在一些冗余。你确定这是真正的原因吗?最后,你的第二个建议很好。
  • @ein 为什么rbegin 解决方案有这个问题?我想不出一个基本不执行 rbegin 技巧的合理的不合适的分区(使用构造元素的输出迭代器)。您需要两个单独的位置来写入异地分区。
  • @Yakk:嗯......你知道吗,你是对的,收回那个。您无需计算匹配元素的数量。
猜你喜欢
  • 2020-04-25
  • 2012-12-03
  • 1970-01-01
  • 2017-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多