在恒定时间内交换std :: vector的内容 - 是否可能?

时间:2013-02-13 12:51:19

标签: c++ vector stdvector

我正在使用std::vector将图像存储在 Image 类中。我理解他们的工作方式有点麻烦。旋转图像的功能:

void Image :: resize (int width, int height)
{
    //the image in the object is "image"

    std::vector<uint8_t> vec;  //new vector to store rotated image

    // rotate "image" and store in "vec"

    image = vec; // copy "vec" to "image" (right?)

    //vec destructs itself on going out of scope
}

有没有办法阻止最后一次复制?就像在Java中一样,只需切换引用?如果防止任何复制,那就太好了。

1 个答案:

答案 0 :(得分:10)

您可以使用std::vector::swap

image.swap(vec);

这实际上是指针交换,内容是传输而不是复制。它完全有效,因为您不关心交换后vec的内容。

在C ++ 11中,您可以将vec的内容“移动”到image

image = std::move(vec);

此操作具有基本相同的效果,除了vec的状态定义不太明确(它处于自洽状态但你不能对其内容作出任何假设......但你不在乎无论如何,因为你知道你立即丢弃它。)