Bru*_*uce 2 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
}
Run Code Online (Sandbox Code Playgroud)
有没有办法阻止最后一个副本?就像在Java中一样,只需切换引用?如果防止任何复制将是很好的.
jua*_*nza 10
你可以使用std::vector::swap:
image.swap(vec);
Run Code Online (Sandbox Code Playgroud)
这本质上是指针交换,内容是传输而不是复制.它完全有效,因为您不关心vec交换后的内容.
在C++ 11中,您可以将内容"移动" vec到image:
image = std::move(vec);
Run Code Online (Sandbox Code Playgroud)
这个操作具有基本相同的效果,除了状态vec不太明确(它处于自我一致的状态,但你不能对其内容作出任何假设......但你无论如何都不在乎,因为你知道你正在丢弃它立即).