Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Указатели засунуть действии в цикл


Автор: Electo 29.9.2009, 09:36
Добрый день.
У меня есть такой код:
Код

    head->left = new myClass;
    head->left->data = head->data;
    head->left->H = head->H;
    head->left->A = head->A;
    head->left->B = head->B;
    head->left->C = head->C;
    head->left->Q = head->Q;
    head->left->computeF();
    head->left->H += head->left->maxF[0];
    head->right = new myClass;
    head->right->data = head->left->data;
    head->right->H = head->H;
    head->right->second( head->left );

    head->left->left = new myClass;
    head->left->left->data = head->right->data;
    head->left->left->H = head->right->H;
    head->left->left->A = head->right->A;
    head->left->left->B = head->right->B;
    head->left->left->C = head->right->C;
    head->left->left->Q = head->right->Q;
    head->left->left->computeF();
    head->left->left->H += head->left->left->maxF[0];
    head->right->right = new myClass;
    head->right->right->data = head->left->left->data;
    head->right->right->H = head->right->H;
    head->right->right->second( head->left->left );

    head->left->left->left = new myClass;
    head->left->left->left->data = head->right->right->data;
    head->left->left->left->H = head->right->right->H;
    head->left->left->left->A = head->right->right->A;
    head->left->left->left->B = head->right->right->B;
    head->left->left->left->C = head->right->right->C;
    head->left->left->left->Q = head->right->right->Q;
    head->left->left->left->computeF();
    head->left->left->left->H += head->left->left->left->maxF[0];
    head->right->right->right = new myClass;
    head->right->right->right->data = head->left->left->left->data;
    head->right->right->right->H = head->right->right->H;
    head->right->right->right->second( head->left->left->left );

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

Автор: shuttle 29.9.2009, 09:44
эта структура вроде как "дерево". Есть мнение что нужно покурить соответствующую документацию.

Автор: Electo 29.9.2009, 09:48
Да дерево, в гугле нашел много информации, например: http://www.codenet.ru/progr/alg/btree.php но я не могу понять как это можно приминить к моему случаю

Автор: zim22 29.9.2009, 09:54
Цитата(Electo @  29.9.2009,  09:36 Найти цитируемый пост)
, можно ли как то это делать через цикл?

Код

myClass *head = new myClass;
myClass **left = &head->left;
myClass **right = &head->right;

myClass **hright = &head;

for (int i = 0; i != 10; ++i) {
  
  *left = new myClass;
  (*left)->data = (*hright)->data;
  (*left)->H = (*hright)->H;
  (*left)->A = (*hright)->A;
  (*left)->B = (*hright)->B;
  (*left)->C = (*hright)->C;
  (*left)->Q = (*hright)->Q;
  (*left)->computeF();
  (*left)->H += (*left)->maxF[0];            

  *right = new myClass;
  (*right)->data = (*left)->data;
  (*right)->H = (*hright)->H;
  (*right)->second( *left );

  left = &(*left)->left;
  right = &(*right)->right;
  hright = &(*hright)->right;
}

Автор: Electo 29.9.2009, 10:55
Спасибо большое, то что нужно, только один вопрос зачем используем скобки вот в таких местах (*hright)->H; ?

Автор: zim22 29.9.2009, 11:24
Цитата(Electo @  29.9.2009,  10:55 Найти цитируемый пост)
с зачем используем скобки вот в таких местах (*hright)->H; ?

попробуй без скобок

Автор: bsa 29.9.2009, 11:27
Цитата(Electo @ 29.9.2009,  10:55)
Спасибо большое, то что нужно, только один вопрос зачем используем скобки вот в таких местах (*hright)->H; ?

Вдумчиво читай литературу про приоритеты операторов в С++.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)