9

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

1 回答 1

18

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

a 的元素vector 是连续存储的,这意味着如果v是 a是不是某种类型的vector<T, Allocator>地方,那么它服从恒等式。Tbool&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));
于 2014-06-21T22:13:54.773 回答