矢量的大小是否仅仅是其各部分之和的大小?

时间:2017-08-18 18:06:22

标签: c++ vector size

例如,float是4个字节。这是否意味着包含10个浮点数的向量恰好是40个字节?

2 个答案:

答案 0 :(得分:0)

可以用不同的方式解释向量的“大小”:

  1. vector::size()提供当前存储的元素的数字 矢量,无论它们分配的内存如何。所以 在您的情况下,myVector.size()将是10

  2. vector:capacity()为您提供到目前为止向量已分配内存的元素数。注意,当连续附加元素时,向量以“块”分配存储器,即它可以一次为50个新元素保留空间以避免重复的存储器分配。所以capacity() >= size()总是如此。

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

  4. 请参阅以下代码:

    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
    

    希望它有所帮助。

答案 1 :(得分:0)

std::vector有3种不同的尺寸。有矢量对象本身的大小,你可以用size(std::vector<some_type>)得到它。但这个尺寸对任何东西都没有用。通常这将是三个指针的大小,因为这通常是矢量的实现方式。

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

向量的最后一个大小是它当前分配的元素总数。这是通过使用capacity成员函数获得的。

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