【发布时间】:2011-09-23 10:34:12
【问题描述】:
我见过一些特殊情况,可以使用 std::rotate 或与其中一种搜索算法结合使用,但通常情况下:当一个人有一个包含 N 个项目的向量并想要编写如下函数时:
void move( int from, int count, int to, std::vector<int>& numbers );
我一直在考虑创建一个新矢量 + std::copy 或插入/擦除的组合,但我不能说我最终得到了一些漂亮而优雅的解决方案。
【问题讨论】:
-
这可能已经很明显了,但我仍然想指出,移动大块内存总是比移动小内存引用效率低。出于这个原因,使用例如执行您描述的操作会更有效地实现。
std::list而不是std::vector。 -
如果源区域和目标区域重叠,
move函数是否应该正常工作? -
@FrerichRaabe:你说得对,这就是我必须处理的。是的,源和目标可以重叠。
-
更新:嘿,这很尴尬,我去找指定功能的人并告诉我它们毕竟不能重叠。我想这会让事情变得容易得多。
-
rotate是最好的办法:stackoverflow.com/a/14580001/634821