我正在使用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中一样,只需切换引用?如果防止任何复制,那就太好了。
答案 0 :(得分:10)
您可以使用std::vector::swap
:
image.swap(vec);
这实际上是指针交换,内容是传输而不是复制。它完全有效,因为您不关心交换后vec
的内容。
在C ++ 11中,您可以将vec
的内容“移动”到image
:
image = std::move(vec);
此操作具有基本相同的效果,除了vec
的状态定义不太明确(它处于自洽状态但你不能对其内容作出任何假设......但你不在乎无论如何,因为你知道你立即丢弃它。)