crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

RazrFalcon
  опции профиля:
сообщение 13.4.2013, 23:34
Сообщение #1


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


Обычный вариант с рекурсией:
void MyClass::process(QDomNode node)
{
    QDomNodeList nodeList = node.childNodes();
    for (int i = 0; i < nodeList.count(); ++i) {
        // some stuff
        if (node.childNodes().at(i).hasChildNodes())
            process(nodeList.at(i));
    }
}

Можно ли, как-то, это обернуть в while, что бы можно было внутри какой-либо функции пройтись по всем элементам. А то сейчас приходиться отдельную функцию заводить...

Сообщение отредактировал RazrFalcon - 13.4.2013, 23:35
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Алексей1153
  опции профиля:
сообщение 14.4.2013, 15:25
Сообщение #2


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

Группа: Участник
Сообщений: 2943
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


переход от рекурсии к итерации производится через создание собственного стека FILO (при рекурсии используется стек вызовов)

инициализация стека: кладём в стек первый (первые) элемент;

while(стек не пуст)
{
     извлечь текущий элемент из стека -> curr;

     исследование и обработка curr , в процессе обработки в стек заносятся ещё элементы;
}



Цитата
что бы можно было внутри какой-либо функции пройтись по всем элементам.

используя схему выше, можно сделать процедуру, собирающую все элементы в один массив в пройденном порядке, затем этот массив передаётся в процедуру обработки каждого элемента.

как вариант - работа с предикатом, шаблонная процедура

Сообщение отредактировал Алексей1153 - 14.4.2013, 15:31
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


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


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 25.4.2025, 7:23