реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Перебор элементов структуры
Jenya7
сообщение Jul 30 2017, 12:55
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Я все время делаю так
Код
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 - Jul 30 2017, 13:55
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 30 2017, 13:56
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (Jenya7 @ Jul 30 2017, 15:55) *
И тут я подумал, а почему не делать так
CODE
while ( &array_struct[i] != ((void*)0) )
Если стоит задача уничтожить все от начала структуры до конца адресного пространства - вполне рабочее решение. Если такой задачи не стоит - используют sizeof(array_struct)/sizeof(array_struct[0]).


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jul 30 2017, 13:58
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Jenya7 @ Jul 30 2017, 15:55) *
И тут я подумал, а почему не делать так
Код
while ( &array_struct[i] != ((void*)0) )
{
     array_struct[i].member = i;
     i++;
}

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

Странно было бы, если бы так кто-то делал. Откуда вдруг возьмется нулевой адрес?
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Jul 30 2017, 13:59
Сообщение #4


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(Сергей Борщ @ Jul 30 2017, 19:56) *
Если стоит задача уничтожить все от начала структуры до конца адресного пространства - вполне рабочее решение. Если такой задачи не стоит - используют sizeof(array_struct)/sizeof(array_struct[0]).

а почему уничтожить?
а ну да. тьфу. вот туплю. sm.gif у меня новый пунктик - все минимизировать и генерикозировать. sm.gif

Сообщение отредактировал Jenya7 - Jul 30 2017, 14:03
Go to the top of the page
 
+Quote Post
k155la3
сообщение Jul 31 2017, 06:06
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



Цитата(Jenya7 @ Jul 30 2017, 16:59) *
. . . все минимизировать и генерикозировать. sm.gif

Ну так....
Если исходить из темы (перебор полей структуры), то решения Вам предлагали в "прошлой теме на этуже тему".
Встроенных возможностей для этого в компиляторе нет - я думаю это сделано специально, чтоб не плодить "большой театр" sm.gif
А для тех, кому нужно нечто особенное - есть CPP. Пишите собственноручно итератор по вашему объекту - в том виде,
который нужен Вам, и так, чтбы им могли пользоваться (без йопрст) другие.


Go to the top of the page
 
+Quote Post
ViKo
сообщение Jul 31 2017, 07:46
Сообщение #6


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Не понимаю. Что нужно - перебрать все элементы одной структуры, как написано в заголовке, или перебрать одни и те же элементы в массиве структур, как предлагается
for ( i = 0; i < sizeof(array_struct)/sizeof(array_struct[0]); i++)
и подтверждается в переписке?
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th April 2024 - 07:05
Рейтинг@Mail.ru


Страница сгенерированна за 0.0144 секунд с 7
ELECTRONIX ©2004-2016