繁体   English   中英

std :: vector:连续数据和复制/移动

[英]std::vector: contiguous data and copy/move

我对以下代码有两个问题: 1) faces元素是否连续? 2) std::vector在插入时是否复制或移动Face f

#include <vector>    
int main()
{
    struct Face {};
    std::vector<Face> faces;

    for (int i=0; i<10; ++i)
    {
        Face f;

        faces.push_back (f);
    }

    return 0;
}

根据标准§23.3.6.1类模板向量概述[vector.overview]:

vector的元素是连续存储的 ,这意味着如果vvector<T, Allocator> ,其中T是除bool之外的某种类型,那么它服从&v[n] == &v[0] + n for all 0 <= n < v.size()的标识&v[n] == &v[0] + n for all 0 <= n < v.size()

就先前C ++ 11编译器中的第二个问题而言, push_back会复制你推回的对象。

在C ++ 11之后,它取决于因为push_back有两个重载,一个采用lvalue引用,另一个采用rvalue引用。

在您的情况下,它将被复制,因为您将对象作为lvalue传递。 为了确保对象的移动,您可以使用std::move()

faces.push_back(std::move(f));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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