| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Помогите оптимизировать |
| Автор: toxx 26.4.2010, 21:17 | ||||||||
Есть структура данных n- мерного дерева
я создаю дерево в 2 шага 1.Создаю корень
2. Остальное дерево
Как мне объединить эти 2 функции в одну и что можно оптимизировать? Хочу переделать эту конструкцию потом под конструктор класса... |
| Автор: mes 26.4.2010, 21:41 |
это структура описывает не дерево, а его стык, а следовательно название не Tree а где у Вас корень ? навису ? заведите структуру/класс Tree, которая будет хранить корень и иметь нужные операции, такие как |
| Автор: toxx 26.4.2010, 21:51 | ||||
mes
Как не дерево?
Нет нет он не на вису... я его(корень) создаю, задаю количество сыновей, потом вызываю insert для этих сыновей, который в свою очередь создаёт дерево всё... |
| Автор: mes 26.4.2010, 21:55 |
Это си стиль, где создается корень и последующее правильное его использование лежит на плечах программиста, А вы, я так полагаю, хотите выразить в С++ стиле, для этого должны общаться не с корнем, а с самим деревом. посмотрите дизайн того же std::list, и сравните его с C-листом. |
| Автор: toxx 26.4.2010, 22:09 | ||||||
| mes вы меня щас так запутали вот деревьями в стиле си и си++, что щас придётся очень много поменять.... я даже не знал об таком когда делал это дерево даже близко я был уверен, что стиль он один... т.е. как я понимаю нужно создать структуру данных
потом создать класс... с этими данными?
эмм, а где это можно посмотреть... всегда было интересно, но не знаю где( знаю гдето в библиотеках вижл студио...) |
| Автор: toxx 26.4.2010, 22:29 | ||||
а где это руководство взять? не разу просто не смотрел ничего подобного.
нет нету... что такое итераторы представляю только теоретически... это очень сильно влияет на то, смогу ли я сделать класс?(если это для этого нужно изучу) |
| Автор: mes 26.4.2010, 22:39 | ||||
ну для краткой информации с примером можно использовать cplusplus.com для более подробной есть книги (где то на форуме есть тема им посвященная и не одна)
да, без понимания что это и какая от этого польза будет трудно понять что требуется от класса. но с другой стороны, для начала, можно сделать древо в "полу-С++" стиле, т.е без итераторов.. Добавлено через 6 минут и 51 секунду В общем общая схема С++ стиля выглядит следующим образом : 1. есть некая структура данных (не struct) представляющая нашу модель, она является подслоем - все элементы ее представляющие недоступны конечному пользователю.. 2. Есть некоторые инструменты, которые знают как пользоваться структурой о предоставляют некий интерфейс конечному пользователю. |
| Автор: toxx 26.4.2010, 22:48 | ||||
| mes т.е. на данном уровне я должен написать без итераторов написать моё дерево... используя вот такую структуру данных
и добавить её в класс и соответственно реализовать методы заполнения и вывода? и класс этот будет выглядеть примерно так:
Мне просто с фронтом работы определиться, я надеялся на одно а получил сразу так сказать "в лоб" то, что я хотел делать как раз после слияния моих функций... |
| Автор: mes 26.4.2010, 23:06 | ||
не дерево, а узел/стык struct Node
угу.. не красиво для контейнера делать print членом класса.. Добавлено через 6 минут и 7 секунд вектор хранит указатели, поэтому желательно, чтоб такой вектор был упрятан подальше в класс, который будет заботиться о правильном удалении элементов и проксировать нужные методы вектора.. |
| Автор: toxx 26.4.2010, 23:47 | ||||||||
mes
ага...
Теперь я не знаю как этим всем пользоваться...эхх и озадачили вы меня(даже конструктор написать не могу). Добавлено через 47 секунд
вроде бы итак спрятан в структуре... |
| Автор: toxx 27.4.2010, 00:32 | ||||
конструктор такой вот получился...для корня
а нормально, что получается так вот?
|
| Автор: mes 27.4.2010, 00:59 |
не очень ) как же спрятан ? если к нему извне resize применяете.. ну cin и cout там только для теста ? я надеюсь ну так в С++-стиле без итераторов дерево не получится.. я предлагал для начала сделать в полу-С++ стиле.. т.е. тот же С но с классами.. Добавлено через 4 минуты и 11 секунд для начала в любом случае надо представить удобную систему представления.. так как перемещаться у вас по древу можно и от соседа к соседу, и вглубь.. |
| Автор: toxx 27.4.2010, 07:44 | ||||
mes
вечером исправлю
ага, это всё само будет заполнятся и для других данных =)меня просто на этом форуме научили идти от простого к сложному... как что новое, так как баран на новые ворота.... |
| Автор: toxx 27.4.2010, 18:23 | ||||||||||||||
Сделал так...опять в стиле си похоже, никак не могу сообразить как сделать конструктор он у меня получается какой-то странный.. Еще есть идея
Cделать конструктор
Конструктор-копирования
и insert
Но почему то эта идея не работает... |
| Автор: azesmcar 28.4.2010, 21:21 | ||||||
| Не совсем понимаю суть вопроса, можно немного прояснить в общих чертах. что попалось на глаза
такой конструктор копирование не имеет смысла, компилятор сам сгенерирует что-то вроде
в чем смысл этой конструкции?
т.е. если список пустой то он ничего нового туда не добавит? |
| Автор: toxx 28.4.2010, 21:41 | ||||||
Хочу переделать моё n-мерное дерево в стиле Cи(мой 1й пост темы) на дерево в стиле C++. Попытки предпринял, но мне кажется получилось тоже что у меня и было. Но пока до конца не понимаю в какую сторону мне делать...
если количество сыновей у вершины не нулевое функция добавляет вершины...делаю рекурсией эти действия
|
| Автор: azesmcar 28.4.2010, 21:55 | ||||
а где тогда итераторы?
а если нулевое то ничего не происходит..это нормально? т.е. когда-то, в самом начале оно ведь нулевое? Добавлено через 54 секунды начните с интерфейса, придумайте интерфейс своему классу, реализуйте функции постышки, а потом думайте над их реализацией. |
| Автор: toxx 28.4.2010, 22:00 | ||
azesmcar
На полу-C++... итераторы я не изучал, стараюсь без STL делать(поэтому полу-C++), но мне mes посоветовал без них пока сделать. т.е. не одна из реализации из этого http://forum.vingrad.ru/forum/topic-298754/0.html# не подходит? =( |
| Автор: mes 28.4.2010, 23:24 | ||
не посоветовал, а согласился что для начала без них.. Доступ будет тогда осуществляться на прямую к структуре, как и в си стиле, также как и гарантом правильности все также программист. Отличие в "полу-С++" будет фактически лишь в организация кода по классам.. Добавлено через 2 минуты и 50 секунд
я уже писал что без итераторов в С++ стиль не получится, так как с одной стороны нельзя открывать доступ к внутренностям, а с другой мы как то должны передвигаться по ней.. Добавлено через 4 минуты и 59 секунд а чего не получается то ? для начала (я уже писал) что надо определиться со структурой дерева (в частности одно, дили двух направленное (сои ссылкой на родителя)), определить набор инструкций, т.е. интерфейс взаимодействия. |
| Автор: azesmcar 28.4.2010, 23:48 | ||||
ну сделайте через Java-Style итераторы, типа этого
|
| Автор: toxx 30.4.2010, 17:35 | ||||
mes
Я 2й день перечитывал тему, читал посты темы, прикидывал ... и наконец все таки отвечу 1.Я не понимаю как можно в один класс записать всё моё дерево. 2.Подумал и решил, что все таки для моей простенькой задачи шашек попроще применить моё дерево в стиле... 3.Я давно уже определился со структурой дерева и интерфейсом, у меня никак не выходит реализация (1) пункта Структура данных и интерфейс у меня будет такой
azesmcar спасибо конечно, но мне до итераторов еще далеко наверно... идея у меня уже есть, но мешает ей двигаться вот такие вот мелкие проблемы... Добавлено через 9 минут и 12 секунд По сути я хочу реализовать вот такую картинку http://www.valar.ru/gallery/0410/ai.jpg |
| Автор: mes 30.4.2010, 17:52 |
в один никак.. Один класс/структура - ветвь/итератор , другой класс - набор функционала ммм... сейчас немного занят.. но тут есть поле для разворота |
| Автор: toxx 30.4.2010, 18:01 | ||||
mes
ой не дорос я еще до этого...всё таки нужно использовать, что я намудрил своим си- деревом =)
эмм, поле для разворота в смысле тема для беседы?=) |
| Автор: mes 30.4.2010, 18:07 |
ага.. терь хоть понятно что Вам требуется.. |