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

Shi*_*bli 9 c++ stdvector contiguous c++11

我对以下代码有两个问题: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;
}
Run Code Online (Sandbox Code Playgroud)

101*_*010 18

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

的元素vector 被存储连续的,这意味着如果v是一个vector<T, Allocator>其中T一些类型比其它bool,那么它遵循的身份&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));
Run Code Online (Sandbox Code Playgroud)