17

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

4

6 回答 6

25

你想要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

于 2010-03-03T16:54:46.517 回答
12

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

于 2010-03-03T16:55:40.593 回答
7

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

于 2010-03-03T16:56:39.917 回答
2

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

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

于 2010-03-03T16:54:52.307 回答
1

vector在 STL 中是类模板,当您在以下向量中提供模板参数时,C++ 编译器会为SomeType<SomeType>类型的类生成代码。因此,当您使用 填充向量时,实际上是在插入另一个对象,因此当您从编译器请求时,它会为您提供插入的对象数量。 希望有帮助!push_backSomeType.size()SomeType

于 2010-03-03T17:11:37.070 回答
0

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

于 2010-03-03T16:55:45.440 回答