矢量C++内存分配

use*_*378 5 c++ memory memory-management vector

我想创建一个代表某种结构的元素向量.

问题是我不知道结构会有多少元素,因为数字会经常变化,我真的不知道如何创建一个矢量.

怎么做到的?

为了使它更清楚:

我在创建矢量时看到了这样的事情:

std::vector<structureType> vectorName(nrOfElements);
Run Code Online (Sandbox Code Playgroud)

括号内我不知道元素的数量和在那里写的内容.

jua*_*nza 12

如果默认构造向量,则会得到一个空向量:

std::vector<structureType> vectorName; // holds 0 elements
Run Code Online (Sandbox Code Playgroud)

然后你可以将元素推入向量,增加其大小(另请参见其他向量修饰符):

vectorName.push_back(someStructureTypeInstance);
Run Code Online (Sandbox Code Playgroud)

这可能适合您的需求.如果您担心将来的内存重新分配,可以std::vector::reserve在构造向量后使用.

std::vector<structureType> vectorName; // holds 0 elements
vectorName.reserve(100); // still 0 elements, but capacity for 100
Run Code Online (Sandbox Code Playgroud)

  • @ user2399378插入第102个元素时会发生的情况是,向​​量必须分配一个足够大的102个元素的新内存块(通常它分配大约所需大小的2倍),然后复制或移动其所有元素原始的101大小的内存到新的,然后取消分配原始.这些是我正在谈论的重新分配.您不必担心内存管理,但重新分配的成本可能很高,因此如果您知道向量的大小,可以通过保留适当的数量来避免它们. (4认同)