交换内存块

Kug*_*uBu 5 c++ memory

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

Ant*_*lov 10

当然,只需使用std::swap_ranges.例如,如果你有一个std::vector<int> v(100)int array[200];你可以做的

std::swap_ranges(std::begin(v), std::end(v), array+50);
Run Code Online (Sandbox Code Playgroud)

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

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

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