[英]Swap contents of std::vector in constant time - is it possible?
我正在使用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中一样,只需切换引用? 如果防止任何复制会很好。
你可以使用std::vector::swap
:
image.swap(vec);
这本质上是指针交换,内容是传输而不是复制。 它完全有效,因为你不关心交换后vec
的内容。
在C ++ 11中,您可以将vec
的内容“移动”到image
:
image = std::move(vec);
这个操作具有基本相同的效果,除了vec
的状态定义不太清楚(它处于自我一致状态但你无法对其内容做出任何假设......但是你无论如何也不在乎,因为你知道你在丢弃它立刻)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.