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

时间:2014-06-21 22:00:09

标签: c++ c++11 stdvector contiguous

我对以下代码有两个问题: 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;
}

1 个答案:

答案 0 :(得分:18)

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

  

vector 的元素是连续存储的,这意味着如果vvector<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));