对于以下代码,我有两个问题: 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 概述[vector.overview]:



至于您在以前的C++ 11编译器中遇到的第二个问题,push_back将复制您推回的对象。

在C++ 11之后,这是因为push_back有两个重载,一个重载了lvalue引用,另一个重载了rvalue引用。

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

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

关于c++ - std::vector:连续数据和复制/移动,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24346232/

10-12 17:18
查看更多