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

房东的猫 提交于 2019-12-29 05:21:06

问题


There is a topic already on this topic but I have doubts still. To calculate the size of a vector, which one is correct:

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

or

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

回答1:


What do you mean by size of the vector? The size of the vector object is just

sizeof(vec);

If you are interested in how much memory the vector has allocated on the heap, you can use

vec.capacity()*sizeof(T)

So, if you add these, you'll get how much memory you've "lost" because of the vector.

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

Please note that exactly how much memory is allocated is implementation-dependent. It's just that the formula above will be practically correct (or approximately correct) on most if not all implementations.




回答2:


If you want to know the size of the data contained within the vector

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

If the type is changed from int to say long long nothing else has to be changed. I find this solution safer then the one using the type in the sizeof because it one can easily be changed without the other.

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


来源:https://stackoverflow.com/questions/8778091/sizeof-stdvector-c

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!