получение количества элементов в структуре - PullRequest
4 голосов
/ 25 ноября 2010

У меня есть структура:

struct KeyPair 
{ 
   int nNum;
   string str;  
};

Допустим, я инициализировал свою структуру:

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

Я бы создал несколько экземпляров структуры с разными размерами. Поэтому, чтобы я мог использовать его в цикле и читать его содержимое, мне нужно получить количество элементов в структуре. Как я могу получить количество элементов в структуре? В этом примере я должен получить 3, так как я инициализировал 3 пары.

Ответы [ 6 ]

5 голосов
/ 25 ноября 2010

Если вы пытаетесь вычислить количество элементов массива 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

3 голосов
/ 25 ноября 2010
sizeof(keys)/sizeof(*keys);
2 голосов
/ 25 ноября 2010

Вы имеете в виду количество элементов в keys? В таком случае вы можете использовать int n = sizeof(keys)/sizeof(keys[0]);

2 голосов
/ 25 ноября 2010

Если вы пытаетесь подсчитать элементы массива, вы можете сделать макрос

#define NUM_OF(x) (sizeof(x)/sizeof(x[0]))
0 голосов
/ 17 февраля 2012

Если вы пытаетесь вычислить количество элементов массива ключей Вы можете просто сделать sizeof (ключи) / sizeof (ключи [0]).

Это не может быть хорошим решением из-за заполнения структуры.

0 голосов
/ 25 ноября 2010

В C ++ это вообще невозможно сделать.Я предлагаю использовать std :: vector.

Другие решения работают в вашем конкретном случае, но должны быть выполнены во время компиляции.Массивы вы новичок или malloc не сможете использовать эти трюки.

...