【问题标题】:sizeof() a vectorsizeof() 一个向量
【发布时间】:2010-03-03 16:51:55
【问题描述】:

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

【问题讨论】:

  • sizeof() 是编译时运算符

标签: c++ vector sizeof


【解决方案1】:

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

【讨论】:

  • @John:如果他呢? reserve()size()没有任何关系
  • 我认为约翰的意思是,如果您想知道向量(和内容)占用了多少内存,您应该查看容量,而不是大小。 “容器及其元素的内存大小”当然是模棱两可的,但我怀疑它更有可能被理解为与向量分配的内存量有关,而不是与元素当前占用的内存量有关。
  • +1 用于说明如何实际获取嵌套容器中字符数的代码。
  • @Steve 和@John:你是对的。我的错。我将更新我的答案以考虑容量。我想我将 John 的评论解释为与元素的数量有关,而不是与内存中的大小有关。
  • 不在内存中,而是未初始化结构/类的大小
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

        • 嗯,这是一个笼统的答案......谁说他在使用push_back,这有什么关系?向量是模板这一事实如何相关?但至少你明白size() 是 OP 正在寻找的东西。
        • @STingRaySC 我试图向 OP 解释 sizeof 与他(/她)想要的东西无关。这是他(/她)应该寻找的 .size() 方法。
        【解决方案6】:

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

        【讨论】:

          猜你喜欢
          • 2023-03-29
          • 2021-03-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-04-12
          • 2010-09-23
          • 2017-07-22
          相关资源
          最近更新 更多