【发布时间】:2018-11-16 05:54:09
【问题描述】:
我做了一些事情来实现两个范围的交错。这就是问题所在。
假设我有两个范围 [a1, b1), call R1 和 [a2, b2) call R2。现在,假设他们的std::distance 结果是相同的,比如n。我想写一个算法
std::interleave(a1, b1, a2, b2, bool swap)
这将对元素进行重新排序,使得 R2 的一个元素将跟随 R1 的一个元素,通过所有 2n 元素。根据swap 的值,它也应该重新排序,因为R1 的一个元素后跟R2 的一个元素。
我使用一个额外的存储空间和两个 for 循环来做到这一点。这个解决方案很简单。如果我尝试更长的时间,我也可能会想出一个就地解决方案。但我想要的是,我想通过从 STL 组装算法来实现这个目标。如何使用 STL 解决这个问题?如果解决方案是就地的更好,但我也愿意使用额外的存储,只要我们使用来自 STL 的算法。
编辑:不应更改给定范围内元素的排列。换句话说,这实际上应该类似于stable_interleave。这就是为什么我想不出使用 std::merge 的东西的原因。
应用:其中一种应用是将视频和图像格式从平面转换为非平面或半平面。
【问题讨论】:
-
您可能能够击败
std::merge为您完成大部分繁重的工作。无关:不要将东西放入std命名空间。只有几次你被允许,这不是其中之一。 -
我刚刚写了
std::,表示我正在寻找一种STL风格的解决方案。关于std::merge,我想过,但我的范围没有排序,它们的特定排列保持不变是我的要求。 -
您可以提供一个比较器,它返回 true、false、true、false....
-
提升有zip iterator