簡體   English   中英

結構中的c ++向量

[英]c++ vector inside a structure

我對使用std::vector有疑問。 如果我在內存中有一個帶有非定義空間的std::vector對象的結構,如果需要重新分配( std::vector ),結構是否也重新分配了? 還是只有std::vector

例如:

struct cluster{
    int a;
    int b;
    struct cluster* parent;
    vector<struct cluster> children;
}

struct cluster obj = {2,1,...};

struct cluster *pobj = &obj;

for(int i = 0; i < 100 ; i ++){
    children.push_back(i); //The capacity will be increased progressly, no?
}

所以,問題是:在for循環結束時是pobj==&obj嗎? 或者obj重新分配,因為孩子再分配std::vector對象?

我希望我解釋了我的懷疑。 謝謝你的時間。

不,你的obj變量永遠不會被重新分配,因為它內部的成員會發生變化。 向量有自己的數據指針,並在內部處理自己的所有分配和重新分配。

以這種方式思考:通常將局部變量(包括完整結構和數組)放在當前函數的堆棧上。 編譯器通過基址的偏移量訪問這些變量。 如果編譯器(或系統)突然開始在內存中移動變量,它會使變量訪問變得相當復雜,並且還會影響程序的運行時速度和效率。 因此局部變量位於堆棧中,並保持編譯器放置的位置。 在堆上分配的數據(比如std::vector的數據)可以很容易地移動,因為所有必須在指向數據的指針中更新,就像我之前所說的那樣,它們都在vector對象內部處理所以沒有無論如何你會注意到。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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