我想創建一個代表某個結構的元素向量。向量C++內存分配
問題是我不知道這個結構會有多少元素,因爲這個數字會經常改變,而且我也不知道如何創建一個向量。
如何做到這一點?
爲了更清楚:
我看到創建載體的情況下,你做這樣的事情:
std::vector<structureType> vectorName(nrOfElements);
我不知道元素的數量和寫什麼那裏,括號之間。
我想創建一個代表某個結構的元素向量。向量C++內存分配
問題是我不知道這個結構會有多少元素,因爲這個數字會經常改變,而且我也不知道如何創建一個向量。
如何做到這一點?
爲了更清楚:
我看到創建載體的情況下,你做這樣的事情:
std::vector<structureType> vectorName(nrOfElements);
我不知道元素的數量和寫什麼那裏,括號之間。
如果默認構建其載體,你會得到一個空:
std::vector<structureType> vectorName; // holds 0 elements
,那麼你可以把內容到載體,增加其大小(也看其他vector modifiers):
vectorName.push_back(someStructureTypeInstance);
這可能適合您的需求。如果您擔心未來的內存重新分配,則可在構建向量後使用std::vector::reserve
。
std::vector<structureType> vectorName; // holds 0 elements
vectorName.reserve(100); // still 0 elements, but capacity for 100
如果我按照你的建議做了menaing預留空間,如果發生了什麼例如我保留101個元素的空間,然後添加第102個元素?另外,在我的程序中,我動態地分配了一些內存。如果我選擇像這樣聲明向量:std :: vector
@ user2399378當你插入第102個元素時會發生什麼,該向量必須分配一個足夠大的102個元素的內存塊(通常它分配大約2倍所需的大小),然後複製或移動它的所有元素原始的101大小的內存塊到新的內存塊,然後取消分配原始內存。這些是我正在談論的重新分配。您不必擔心內存管理,但重新分配可能會很昂貴,所以如果您知道向量的大小,您可以通過預留適量來避免它們。 – juanchopanza
[如果你在括號之間沒有寫任何東西,你會發現最令人頭疼的解析](https://ideone.com/B5sBce)。如果您正在使用'C++ 11',則完全忽略括號(或使用大括號'{}'統一初始化語法)。 – BoBTFish
其實,你會聲明一個這樣的函數。所以你也需要省略'()',或者如果你有C++ 11,就使用'{}'。 – juanchopanza
@BoBTFish是的,我知道關於令人煩惱的解析。是的,我忘了說忽略'()'。感謝您的評論。我會更新。 – borisbn
您可以更改元素的數量矢量包含,通過插入和/或刪除元素。您正在尋找載體的方法insert
,push_back
/emplace_back
, resize
,pop_back
,erase
。
你會發現在任何C++參考方法(例如有「調節器」部分中一看here),並在您選擇的C++入門書描述。
'std :: vector'的全部問題是你不需要知道大小。只需完全跳過括號,然後使用['myVector.push_back();'](http://en.cppreference.com/w/cpp/container/vector/push_back)添加到向量中。它會根據需要自動擴展內部存儲器。您可以通過['myVector.size();'](http://en.cppreference.com/w/cpp/container/vector/size)獲取當前大小。 – BoBTFish
[Allocate memory for a vector]的可能副本(http://stackoverflow.com/questions/4427738/allocate-memory-for-a-vector) – 2013-05-30 13:37:41