我有一个vector<set<char> >
数据结构(事务数据库),我想知道它的大小。当我对每个使用 sizeof() 时set<char>
,尽管集合包含 3、4 或 5 个字符,但大小为 24。后来,当我使用vector<set<char> >
大小为 12 的 sizeof() 时……我想这不是了解数据结构大小的方法。有什么帮助吗?谢谢。
6 回答
你想要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
sizeof
返回对象本身的大小。如果它包含指向数组的指针,例如它不会计算数组的大小,它只会计算指针的大小(32 位上的 4 个)以供矢量使用.size
Vector 是使用指向实际存储的内部指针来实现的。因此 sizeof() 将始终返回不包括数据存储本身的相同结果。尝试改用该vector::size()
方法。这将返回向量中的元素数。
sizeof()
是在编译时计算的,所以它无法告诉你它里面有多少元素。
使用size()
矢量对象的方法。
vector
在 STL 中是类模板,当您在以下向量中提供模板参数时,C++ 编译器会为SomeType<SomeType>
类型的类生成代码。因此,当您使用 填充向量时,实际上是在插入另一个对象,因此当您从编译器请求时,它会为您提供插入的对象数量。
希望有帮助!push_back
SomeType
.size()
SomeType
使用vector::size()
成员函数找出向量中的项目数。提示 - 它们是在免费商店中分配的。