大小与向量的容量?

时间:2011-06-09 17:35:41

标签: c++ vector

我有点困惑这两个看起来对我来说都是这样。 虽然可能会出现不同编译器的容量和大小可能不同的情况。它可能有什么不同。 它还说,如果我们的内存不足,容量会发生变化。

所有这些事情对我来说都不清楚。

有人可以给出解释。(如果可能的话和示例,或者如果我可以对任何程序进行任何测试来理解它)

7 个答案:

答案 0 :(得分:58)

多个编译器之间不允许

大小不同。向量的大小是它包含的元素的数量,它直接由您放入向量的元素数量控制。

容量是向量当前使用的空间量。在引擎盖下,矢量只使用一个数组。向量的容量是该数组的大小。这总是等于或大于大小。它们之间的区别在于,需要重新分配引擎盖下的数组之前可以添加到向量的元素数。

你几乎不应该关心容量。它的存在是为了让具有非常特定性能和内存限制的人完全按照自己的意愿行事。

答案 1 :(得分:25)

大小:当前在向量中的项目数

容量:向量在“满”之前可以容纳多少项。一旦完成,添加新项将导致分配新的更大的内存块并将现有项复制到其中

答案 2 :(得分:23)

假设你有一个水桶。这桶最多可容纳5加仑水,因此其容量为5加仑。它可以具有0到5之间的任何水量,包括0和5。从矢量的角度来看,桶中当前的水量是其大小。因此,如果这个桶是半满的,它的大小为2.5加仑。

如果您尝试向水桶添加更多水并且它会溢出,则需要找到更大的水桶。所以你得到一个容量更大的水桶,把旧水桶的内容倒入新水桶,然后加入新水。

容量:Vector / bucket可容纳的最大内容量。 大小:当前在Vector / bucket中的内容量。

答案 3 :(得分:6)

size()告诉您目前有多少元素。 capacity()告诉你在向量需要为自己重新分配内存之前,大小可以达到多大。

容量始终大于或等于大小。您不能在元素#size()-1之外编制索引。

答案 4 :(得分:5)

大小是向量中元素的数量。容量是向量当前可以容纳的最大元素数。

答案 5 :(得分:5)

大小是向量中存在的元素数

容量是矢量当前使用的空间量。

让我们用一个非常简单的例子来理解它:

using namespace std;

int main(){
  vector<int > vec;
  vec.push_back(1); 
  vec.push_back(1); 
  vec.push_back(1); 
  cout<<"size of vector"<<vec.size()<<endl;
  cout<<"capacity of vector"<<vec.capacity()<<endl;
  return 0;
}

目前尺寸为3和    容量是4。

现在,如果我们再推回一个元素,

using namespace std;
  int main(){
  vector<int> vec;
  vec.push_back(1); 
  vec.push_back(1); 
  vec.push_back(1); 
  vec.push_back(1);
  cout<<"size of vector"<<vec.size()<<endl;
  cout<<"capacity of vector"<<vec.capacity()<<endl;
  return 0;
}

现在 大小是:4 容量是4

现在,如果我们尝试在vector中再插入一个元素,那么大小将变为5,但容量将变为8。

它基于vector的数据类型发生,在本例中vector类型为int,因为我们知道int的大小是4个字节所以编译器将分配4块内存..当我们尝试添加第5个元素时,vector::capacity()是我们当前的两倍。

同样继续......例如:如果我们尝试插入第9个元素,那么vector的大小将为9,容量将为16 ..

答案 6 :(得分:0)

向量大小是向量的元素总数,并且对于所有编译器始终相同。矢量可重新调整大小。

容量是向量当前可以容纳的最大元素数。对于不同的编译器,它可能会有所不同。

容量会根据需要更改,或者您可以设置初始容量,并且在达到该容量之前不会调整大小。它会自动展开。

容量 > = 大小