簡體   English   中英

向量的向量,堆與堆棧(C ++)

[英]Vector of vectors, heap versus stack (C++)

我想初始化一個包含指向課程的指針的向量。 我宣布了這一點:

std::vector<std::vector<Course*> > *CSPlan = 
        new std::vector<std::vector<Course*> >(smsNum);

我要做的是擁有一個向量向量,每個向量內部是一個包含指向Courses指針的向量,並且我希望MAIN向量的大小為int smsNum 此外,我希望將其放在堆上。

我的問題是:

  1. 主向量和內部向量都分配在堆上嗎? 還是僅MAIN向量位於堆上,並且其索引是堆棧上其他較小向量的指針?

  2. 我聲明它的大小為int smsNum因此Main向量的大小為10,但是較小的向量呢? 它們還是這么大還是仍然動態?

最后,我的目標是在堆上有一個向量,既是Main向量又是子向量,並且Main向量的大小只有smsNum,其余都是動態的。

任何可以增長到用戶希望的大小的結構都將分配在堆上。 另一方面,內存堆棧用於分配靜態分配的變量,程序在編譯過程中可以靜態控制大小。

由於您可以有這樣的循環:

for (i = 0; i < your_value; i++) {
    vector.insert(...);
}

並且考慮將your_value作為從標准輸入讀取的整數,編譯器無法控制向量的大小,即,它不知道您可以執行的最大插入量是多少。

為了解決這個問題,必須在堆上分配該結構,堆可能會增長到操作系統允許的大小—考慮主內存並進行交換。 作為補充,如果使用指向向量的指針,則將簡單地動態分配變量以引用向量。 不會改變以下事實:必須在堆上分配向量的內容。

您將在堆棧中:

  • 變量“ x”,存儲變量“ y”的地址;

在你的堆里:

  • 變量“ y”的值,即對向量的向量的引用;

  • 向量向量的內容(通過“ y”訪問,通過“ x”訪問)。

暫無
暫無

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

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