[英]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
的元素是连续存储的 ,这意味着如果v
是vector<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.