2017-08-18 57 views

回答

0

一个可以解释以不同的方式的载体的“大小”:

  1. vector::size()给出当前存储在 向量元素的数目,而不管他们分配内存。所以 myVector.size()你的情况是10

  2. vector:capacity()为您提供了该载体迄今已分配的内存元件的数量。请注意,矢量在连续附加元素时,会以“块”的形式分配内存,即它可能会一次为50个新元素预留空间,以避免重复分配内存。所以capacity() >= size()总是如此。

  3. sizeof(myVector)会给你管理一系列动态增加的元素所必需的数据结构vector的大小。它通常包含动态分配的内存,这并不反映在sizeof中,因此在大多数情况下sizeof的用处较少。

请看下面的代码:

int main() { 

    vector<float> fv; 
    for (int i=0; i<10; i++) { 
     fv.push_back(1.0); 
    } 
    cout << "size(): " << fv.size() << endl; 
    cout << "capacity(): " << fv.capacity() << endl; 
    cout << "sizeof(fv): " << sizeof(fv) << endl; 

    return 0; 
} 

输出:

size(): 10 
capacity(): 16 
sizeof(fv): 24 

希望它能帮助。

0

A std::vector有3种不同的尺寸。有矢量对象本身的大小,你可以通过size(std::vector<some_type>)获得。尽管如此,这个尺寸对于任何东西都不是很有用通常,这将是三个指针的大小,因为这是典型的矢量实现方式。

第二个尺寸是从size()成员函数返回的内容。从此返回的值是向量中元素的数量。这是大多数人在谈论矢量大小时使用的“大小”。

向量所具有的最后大小是它当前分配的元素的总数。这是从使用capacity成员函数获得的。

所以一个持有10个浮点数的向量需要使用至少10个浮点值的内存,但它可能会使用更多,因为允许capacity()size()更粗。但矢量对象本身的大小(sizeof(name_of_vector))将是一些值,并且无论添加到矢量中的元素有多少,该值都不会改变。