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