[英]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.