c++ 向量的大小与容量?

col17t5w  于 2023-08-09  发布在  其他
关注(0)|答案(9)|浏览(139)

我有点困惑,这两个对我来说是一样的。尽管可能发生容量和大小在不同的编译器上可能不同的情况。可能会有什么不同。它还说,如果我们的内存不足,容量会发生变化。
所有这些事情对我来说都有点不清楚。
有人能给予一个解释。(如果可能的话,并举例说明,或者如果我可以做任何测试的任何程序,以了解它)

5sxhfpxr

5sxhfpxr1#

大小不允许在多个编译器之间有差异。向量的大小是它包含的元素的数量,它直接由你放入向量中的元素数量控制。
容量是向量拥有的总空间量。在引擎盖下,向量只使用数组。向量的容量就是数组的大小。它始终等于或大于大小。它们之间的区别是在需要重新分配底层数组之前可以添加到向量中的元素数量。

你几乎永远不应该关心容量。它的存在是为了让具有非常特定的性能和内存限制的人做他们想做的事情。

oymdgrw7

oymdgrw72#

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

w1jd8yoj

w1jd8yoj3#

假设你有一个桶。这个水桶最多能装5加仑的水,所以它的容量是5加仑。其可具有0至5(包括0和5)之间的任何量的水。当前桶中的水量在矢量方面是其大小。所以如果这个桶是半满的,它的大小是2.5加仑。
如果你想往桶里加更多的水,它会溢出,你需要找一个更大的桶。所以你要找一个容量更大的桶,把旧桶里的水倒进新桶里,然后加入新的水。
容量:Vector/桶可容纳的最大容量。Size:当前Vector/bucket中的内容数量。

vnjpjtjt

vnjpjtjt4#

Size是向量中存在的元素的数量
容量是向量当前使用的空间量。

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

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中再插入一个元素,则size将变为5,但capacity将变为8。
它基于vector的数据类型发生,在这里,在int类型的vector中,因为我们知道int的大小是4字节,所以编译器将分配4块内存..当我们尝试添加第5个元素时,vector::capacity()是我们目前拥有的两倍。
保持不变,例如:如果我们尝试插入第9个元素,则vector大小将为9,容量将为16。

izkcnapc

izkcnapc5#

size()告诉你当前有多少个元素。capacity()告诉您在向量需要为自己重新分配内存之前,大小可以达到多大。
容量始终大于或等于大小。不能索引元素# size()-1以外的元素。

ctehm74n

ctehm74n6#

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

tjjdgumg

tjjdgumg7#

向量大小是向量的元素总数,对于所有编译器来说都是相同的。向量可重新调整大小。
容量是向量当前可以容纳的最大元素数。它可能因不同的编译器而异。
容量会根据需要进行更改,或者您可以设置初始容量,在达到该容量之前,它不会调整大小。它会自动扩展。
容量> =尺寸

fzsnzjdm

fzsnzjdm8#

一个是更重要的 * 接口 *,另一个是更重要的 * 实现细节 *。您将主要处理大小而不是容量。换句话说:

  • 大小是向量中的项数。如果你想遍历向量,你需要知道它的大小。
  • 容量是在必须为向量分配更多内存之前,向量中可以容纳多少项。一旦达到容量限制,就向向量分配更多的存储器。

大小的类比是盒子里的球的数量,而容量是盒子的大小。在编程时,你通常想知道盒子里有多少个球。vector实现应该为您处理容量(一旦它装满了,就可以制作一个更大的盒子)。


的数据

h6my8fg2

h6my8fg29#

为了对上面所描述的内容给予更直观的答案。每当向量的容量发生变化时,尝试查看内存位置的变化。
Memory location changes of the vector

相关问题