交换内存块

时间:2014-01-05 14:35:00

标签: c++ memory

有两种不同的内存块,大小不同。有没有办法在不分配新内存的情况下交换两个相同大小的部分?

1 个答案:

答案 0 :(得分:9)

当然,只需使用std::swap_ranges即可。例如,如果您有std::vector<int> v(100)int array[200];,则可以执行

std::swap_ranges(std::begin(v), std::end(v), array+50);

将向量中的值与数组中间的值交换。

具体说明内存使用情况:如果您有复杂的迭代器或对象类型,则可能需要一个堆栈帧来进行比较,取消引用或赋值运算符。 swap_ranges是否需要自己的堆栈帧取决于实现。

在上面的例子中,我希望所有内容都可以优化到一个简单的循环。 (我试图对其进行分析,但我的简单测试用例已针对一系列printf调用进行了优化。)