Перейти к содержанию
    

Перебор элементов структуры

Я все время делаю так

for ( i = 0; i < MAX_ELEMENTS; i++)
{
     array_struct[i].member = i;
}

И тут я подумал, а почему не делать так

while ( &array_struct[i] != ((void*)0) )
{
    array_struct[i].member = i;
    i++;
}

как минимум не надо заморачиваться с MAX_ELEMENTS. что странно я никогда не видел чтоб так делали.

 

хотя можно и так

for ( i = 0; i < sizeof(array_struct)/sizeof(array_struct[0]); i++)

лучшее враг хорошего.

Изменено пользователем Jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И тут я подумал, а почему не делать так

while ( &array_struct[i] != ((void*)0) )

Если стоит задача уничтожить все от начала структуры до конца адресного пространства - вполне рабочее решение. Если такой задачи не стоит - используют sizeof(array_struct)/sizeof(array_struct[0]).

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И тут я подумал, а почему не делать так

while ( &array_struct[i] != ((void*)0) )
{
     array_struct[i].member = i;
     i++;
}

как минимум не надо заморачиваться с MAX_ELEMENTS. что странно я никогда не видел чтоб так делали.

Странно было бы, если бы так кто-то делал. Откуда вдруг возьмется нулевой адрес?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если стоит задача уничтожить все от начала структуры до конца адресного пространства - вполне рабочее решение. Если такой задачи не стоит - используют sizeof(array_struct)/sizeof(array_struct[0]).

а почему уничтожить?

а ну да. тьфу. вот туплю. :) у меня новый пунктик - все минимизировать и генерикозировать. :)

Изменено пользователем Jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

. . . все минимизировать и генерикозировать. :)

Ну так....

Если исходить из темы (перебор полей структуры), то решения Вам предлагали в "прошлой теме на этуже тему".

Встроенных возможностей для этого в компиляторе нет - я думаю это сделано специально, чтоб не плодить "большой театр" :)

А для тех, кому нужно нечто особенное - есть CPP. Пишите собственноручно итератор по вашему объекту - в том виде,

который нужен Вам, и так, чтбы им могли пользоваться (без йопрст) другие.

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не понимаю. Что нужно - перебрать все элементы одной структуры, как написано в заголовке, или перебрать одни и те же элементы в массиве структур, как предлагается

for ( i = 0; i < sizeof(array_struct)/sizeof(array_struct[0]); i++)

и подтверждается в переписке?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...