簡體   English   中英

std :: vector:連續數據和復制/移動

[英]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的元素是連續存儲的 ,這意味着如果vvector<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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM