[英]Vector of vectors, heap versus stack (C++)
我想初始化一個包含指向課程的指針的向量。 我宣布了這一點:
std::vector<std::vector<Course*> > *CSPlan =
new std::vector<std::vector<Course*> >(smsNum);
我要做的是擁有一個向量向量,每個向量內部是一個包含指向Courses指針的向量,並且我希望MAIN向量的大小為int smsNum
。 此外,我希望將其放在堆上。
我的問題是:
主向量和內部向量都分配在堆上嗎? 還是僅MAIN向量位於堆上,並且其索引是堆棧上其他較小向量的指針?
我聲明它的大小為int smsNum
因此Main向量的大小為10,但是較小的向量呢? 它們還是這么大還是仍然動態?
最后,我的目標是在堆上有一個向量,既是Main向量又是子向量,並且Main向量的大小只有smsNum,其余都是動態的。
任何可以增長到用戶希望的大小的結構都將分配在堆上。 另一方面,內存堆棧用於分配靜態分配的變量,程序在編譯過程中可以靜態控制大小。
由於您可以有這樣的循環:
for (i = 0; i < your_value; i++) {
vector.insert(...);
}
並且考慮將your_value
作為從標准輸入讀取的整數,編譯器無法控制向量的大小,即,它不知道您可以執行的最大插入量是多少。
為了解決這個問題,必須在堆上分配該結構,堆可能會增長到操作系統允許的大小—考慮主內存並進行交換。 作為補充,如果使用指向向量的指針,則將簡單地動態分配變量以引用向量。 這不會改變以下事實:必須在堆上分配向量的內容。
您將在堆棧中:
在你的堆里:
變量“ y”的值,即對向量的向量的引用;
向量向量的內容(通過“ y”訪問,通過“ x”訪問)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.