是其结构大小的空向量

Is an empty vector the size of its struct?

本文关键字:向量 结构      更新时间:2023-10-16

假设我有一个这样的结构:

struct vertexNodeInfo
{
    unsigned char level;
    int node;
    double leaf;
};

如果我当时有这个:

vector<vertexNodeInfo> node;

在任何push_back之前,空向量会有多大(内存方面,而不是.size)?它的大小(再次,就内存而言)会与vector<int> node;完全相同吗?

没有要求。更重要的是,这是一个表述不佳的问题。

向量的.size0的,因为它没有元素。

sizeof不会影响元素的数量,并且通常足够大,可以包含指向类型的一个或两个指针(其大小本身可能有所不同,因此无法保证sizeof(vector<vertexNodeInfo>)sizeof(vector<int>)相等)、大小和容量。

正如卢基安所说,很可能但不是必需的 sizeof(vector<int>) == sizeof(vector<vertexNodeInfo>) .

此外,我不认为该标准对默认初始化向量的capacity有任何要求:

C++中矢量的初始容量

因此,它

允许具有 10 个容量,这意味着它预先为 10 个元素分配了足够的内存。那么这个分配的大小当然取决于元素的大小。您没有确切定义"内存方面有多大"的含义,但是如果您打算包含动态分配,那么这将是其中之一。

我不认为这将是vector的一个很好的实现,但它符合标准。