sizeof()一个向量

时间:2010-03-03 16:51:56

标签: c++ vector sizeof

我有一个vector<set<char> >数据结构(事务数据库),我想知道它的大小。当我对每个set<char>使用sizeof()时,尽管该集合包含3,4或5个字符,但其大小为24。后来,当我使用带有vector<set<char> >的sizeof()时,大小为12 ......我想这不是了解数据结构大小的方法。有帮助吗? 感谢。

6 个答案:

答案 0 :(得分:22)

您需要vector::size()set::size()

假设v是你的向量,请执行以下操作:

size_t size = 0;
for (vector<set<char> >::const_iterator cit = v.begin(); cit != v.end(); ++cit) {
    size += cit->size();
}

sizeof()给出了它所应用的对象/类型的内存大小,以sizeof(char)的倍数(通常是一个字节)。如果您想知道容器及其元素的内存大小,可以这样做:

sizeof(v) + sizeof(T) * v.capacity(); // where T is the element type

答案 1 :(得分:11)

sizeof返回对象本身的大小。如果它包含指向数组的指针,例如它不会计算数组的大小,它将仅计算指针的大小(32位为4)以供向量使用.size

答案 2 :(得分:6)

使用指向实际存储的内部指针实现Vector。因此,sizeof()将始终返回不包含数据存储本身的相同结果。请尝试使用vector::size()方法。这将返回向量中的元素数。

答案 3 :(得分:2)

sizeof()是在编译时计算的,所以它无法告诉你里面有多少元素。

使用矢量对象的size()方法。

答案 4 :(得分:1)

STL中的

vector是一个类模板,当您在向量后面的<SomeType>内给出模板参数时,C ++编译器为 SomeType <类的类生成代码/ strong>即可。因此,当您使用push_back填充向量时,实际上是插入另一个SomeType对象,因此当您从编译器请求.size()时,它会为您提供插入的SomeType个对象的数量由你。
希望有所帮助!

答案 5 :(得分:0)

使用vector::size()成员函数查找向量中的项目数。提示 - 它们被分配到免费商店。