繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM