Здравствуйте, Stanislav V. Zudin, Вы писали:
SVZ>Здравствуйте, _hum_, Вы писали:
SVZ>>>Предлагаю "ход конём". Заменить указатели на индексы в массиве.
__>>ну, тогда ж придется писать аналог менеждера кучи (чтоб искал свободное место, куда можно вставлять новые элементы, чтобы помечал удаленные как свободные места и т.п.). но еще чуть-чуть, и я психану и все же наверное так и сделаю, потому что тратить столько времени на реализацию обычного дерева — это уж слишком (а я уже третий день с этим вожусь)
SVZ>Ох уж эта молодёжь...
SVZ>Вот получение узла из "менеджера кучи":
| | code |
| | SVZ>SVZ>// ==========================================================================
SVZ>// Создать узел
SVZ>dom::NODE dom::Document::makeNode(LPCTSTR name)
SVZ>{
SVZ> dom::NODE nodeN = m_NodeFreeList;
SVZ> if ( nodeN < 0 )
SVZ> {
SVZ> nodeN = static_cast<dom::NODE>(m_InfoNode.size());
SVZ> m_InfoNode.push_back( NodeInfo() );
SVZ> }
SVZ> else
SVZ> {
SVZ> m_NodeFreeList = m_InfoNode[nodeN].next;
SVZ> m_InfoNode[nodeN] = NodeInfo();
SVZ> }
SVZ> NAMEREF nref = makeNodeName(name);
SVZ> m_InfoNode[nodeN].name = nref;
SVZ> return nodeN;
SVZ>}
SVZ>
|
| | |
SVZ>Удаленные узлы помещаются в односвязный список, голова которого хранится в m_NodeFreeList.
SVZ>Хранить можно и плоский список, и целые поддеревья (только в makeNode придется этот факт учитывать), в общем пространство для маневра обширное.
SVZ>Свой код не привожу, потому что у меня там хитрое владение именами узлов — не думаю, что тебе это пригодится.
SVZ>По сложности — задачка на пару часов для студента 2 курса.
я уже все это писал раньше (я не молодежь), потому-то мне и лень было заново этим заниматься

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