添加和删​​除元素如何“重新缩放”数据? vector 的大小是如何计算的(我相信它会被跟踪)?任何其他有关 vector 的资源都将受到赞赏。

最佳答案

就大小而言,std::vector有两个感兴趣的值:sizecapacity(可通过.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行。

10-08 16:03