问题描述
如何添加和删除元素重新缩放数据?如何计算向量的大小(我相信它是跟踪)?
How does adding and removing elements "rescale" the data? How is the size of the vector calculated (I believe it is kept track of)? Any other additional resources to learn about vectors would be appreciated.
推荐答案
在大小方面,有两个值 std :: vector
: size
和 capacity
通过 .size()
和 .capacity()
)。
In terms of sizing, there are two values of interest for an std::vector
: size
, and capacity
(accessed via .size()
and .capacity()
).
.size()
是向量中包含的元素数, .capacity()
.size()
is the number of elements that are contained in the vector, whereas .capacity()
is the number of elements that can be added to the vector, before memory will be re-allocated.
如果你 .push_back()
If you .push_back()
an element, size will increase by one, up until you hit the capacity. Once the capacity is reached, most (all?) implementations, re-allocate memory, doubling the capacity.
您可以使用.reserve预留容量。例如:
You can reserve a capacity using .reserve. For example:
std::vector<int> A;
A.reserve(1); // A: size:0, capacity:1 {[],x}
A.push_back(0); // A: size:1, capacity:1 {[0]}
A.push_back(1); // A: size:2, capacity:2 {[0,1]}
A.push_back(2); // A: size:3, capacity:4 {[0,1,2],x}
A.push_back(3); // A: size:4, capacity:4 {[0,1,2,3]}
A.push_back(4); // A: size:5, capacity:8 {[0,1,2,3,4],x,x,x}
内存的重新分配将发生在第4,5和7行。
Reallocations of memory would occur at lines 4, 5, and 7.
这篇关于c ++ std :: vector如何工作?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!