添加和删除元素如何“重新缩放”数据? vector 的大小是如何计算的(我相信它会被跟踪)?任何其他有关 vector 的资源都将受到赞赏。
最佳答案
就大小而言,std::vector
有两个感兴趣的值:size
和capacity
(可通过.size()
和.capacity()
访问)。.size()
是 vector 中包含的元素数,而.capacity()
是在重新分配内存之前可以添加到 vector 中的元素数。
如果您对元素进行.push_back()
编码,则大小将增加一,直到达到容量为止。达到容量后,大多数(所有?)实现都会重新分配内存,从而使容量加倍。
您可以使用.reserve()
保留容量。例如:
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行。