【问题标题】:getting the number of elements in a struct获取结构中元素的数量
【发布时间】:2010-11-25 10:16:22
【问题描述】:

我有一个结构:

struct KeyPair 
{ 
   int nNum;
   string str;  
};

假设我初始化了我的结构:

 KeyPair keys[] = {{0, "tester"}, 
                   {2, "yadah"}, 
                   {0, "tester"}
                  }; 

我将创建几个不同大小的结构实例。因此,为了让我能够在循环中使用它并读取它的内容,我必须获取结构中的元素数量。如何获取结构中的元素数量?在这个例子中,我应该得到 3,因为我初始化了 3 对。

【问题讨论】:

  • 为什么不使用 std::map 并且您可以使用所有迭代器。
  • 我想你想要数组keys中的元素个数,对吧?
  • 你想要结构体的大小还是数组的大小?这令人困惑......

标签: c++ data-structures struct sizeof


【解决方案1】:

如果您要计算 keys 数组的元素数,您可以简单地执行 sizeof(keys)/sizeof(keys[0])

关键是sizeof(keys) 的结果是内存中键数组的字节大小。这与数组元素的数量不同,除非元素是 1 字节长。要获得元素的数量,您需要将字节数除以元素类型的大小sizeof(keys[0]),这将返回数据类型key[0] 的大小。

这里的重要区别是要了解sizeof() 对数组和数据类型的行为不同。您可以将两者结合起来实现您所需要的。

http://en.wikipedia.org/wiki/Sizeof#Using_sizeof_with_arrays

【讨论】:

  • sizeof 不返回以字节为单位的大小。 sizeof(char) == 1 char 可以是 16 位,例如 Texas Instruments TMS320C54x DSP
  • @T33C: sizeof 确实根据标准返回大小(以字节为单位)。 C++ 标准将“字节”定义为字符。 (这可能不是你习惯的“字节”的意思,但标准是一致的。)
【解决方案2】:
sizeof(keys)/sizeof(*keys);

【讨论】:

    【解决方案3】:

    如果你想计算数组的元素,你可以做一个宏

    #define NUM_OF(x) (sizeof(x)/sizeof(x[0]))
    

    【讨论】:

      【解决方案4】:

      您的意思是 keys 中的元素数?在这种情况下,您可以使用int n = sizeof(keys)/sizeof(keys[0]);

      【讨论】:

        【解决方案5】:

        在 C++ 中,通常不可能做到这一点。我建议使用 std::vector。

        其他解决方案适用于您的具体情况,但必须在编译时完成。您新建的数组或 malloc 将无法使用这些技巧。

        【讨论】:

        • 是的,总是可以通过计算数组的大小并除以元素的大小来计算 C/C++ 数组中元素的数量。也许这个问题有点令人困惑,因为 Owen 询问的是 struct 的大小而不是数组中元素的数量。但是看过他以前的帖子和他的编辑后,元素的数量就是他所追求的。
        【解决方案6】:

        如果您尝试计算键数组的元素数 你可以简单地做 sizeof(keys)/sizeof(keys[0])。

        由于结构填充,这不是一个通用的好解决方案。

        【讨论】:

        • KeyPair 中存在什么填充并不重要,这是计算数组大小的完全正确的方法。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-01-25
        • 1970-01-01
        • 1970-01-01
        • 2021-01-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多