我有一个vector<set<char> >
数据结构(事务数据库),我想知道它的大小。当我对每个set<char>
使用sizeof()时,尽管该集合包含3,4或5个字符,但其大小为24。后来,当我使用带有vector<set<char> >
的sizeof()时,大小为12 ......我想这不是了解数据结构大小的方法。有帮助吗?
感谢。
答案 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)
vector
是一个类模板,当您在向量后面的<SomeType>
内给出模板参数时,C ++编译器为 SomeType <类的类生成代码/ strong>即可。因此,当您使用push_back
填充向量时,实际上是插入另一个SomeType
对象,因此当您从编译器请求.size()
时,它会为您提供插入的SomeType
个对象的数量由你。
希望有所帮助!
答案 5 :(得分:0)
使用vector::size()
成员函数查找向量中的项目数。提示 - 它们被分配到免费商店。