sizeof()std :: vector(C ++)

时间:2012-01-08 13:52:51

标签: c++ vector sizeof

关于这个话题已有一个话题,但我仍有疑虑。要计算向量的大小,哪一个是正确的:

sizeof(VEC) + sizeof(int) * VEC.capacity()

VEC.capacity() * (sizeof(VEC) + sizeof(int))

2 个答案:

答案 0 :(得分:16)

你对矢量的大小是什么意思?矢量对象的大小只是

sizeof(vec);

如果您对矢量在堆上分配了多少内存感兴趣,可以使用

vec.capacity()*sizeof(T)

所以,如果你添加这些,你会得到你因为向量而“丢失”了多少内存。

vec.capacity()*sizeof(T) + sizeof(vec)

请注意,确切分配了多少内存取决于实现。只要上面的公式在大多数(如果不是全部)实现中都几乎正确(或近似正确)。

答案 1 :(得分:0)

如果您想知道矢量中包含的数据的大小

std::vector<int> vec;
...
vec.size() * sizeof(decltype(bufferIn)::value_type))

如果类型从int更改为long long,则不需要更改其他任何内容。我发现这个解决方案比使用sizeof中的类型更安全,因为它可以很容易地在没有另一个的情况下进行更改。

std::vector<long long> vec; // lets go from int to int64
...
vec.size() * sizeof(int); // woops problem on the horizon