有两种不同的内存块,大小不同。有没有办法在不分配新内存的情况下交换两个相同大小的部分?
答案 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
调用进行了优化。)