Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > STL vector |
Автор: Dray 3.4.2005, 20:21 | ||||
Есть класс
Контейнер:
Нужно из вектора построить дерево по след. алгоритму. - Из списка находится два элемента с наименьшим m_CharCount. - Удаляются из списка. - Создается новый элемент типа CNode, где m_pLeft и m_pRight эти найденные элементы. - m_CharCount нового эл-та - сумма m_CharCount'ов двух найденных эл-в. - Новый элемент добавляется в список. - Следующие наименьшие один или два элемента могут быть эти новые добавленные. - Так повторяется пока список не иссякнится. Помогите пожалуйста. Просто проблемы возникли из-за использования вектора. |
Автор: bel_nikita 3.4.2005, 23:45 | ||
|
Автор: Dray 4.4.2005, 21:27 | ||||
Ну я делал так:
Однако стандартный min_element находит постоянно один и тот же элемент. Т. е. похоже, что erase его вообще не удаляет. ![]() |
Автор: yaja 5.4.2005, 23:29 |
Конечно не мое дело, но по-видимому тебе надо написать сжатие Хафмана(или хотя бы его построение). С использованием спиаска ты сделаещь ето за O(n^2), а можно за O(n*log(n)). Да плюс stl, то сильно он у тебя тормозить будет... Лучше использовать приоритетную очередь ![]() ![]() ![]() ![]() |
Автор: DENNN 6.4.2005, 09:12 | ||
Что-то сомневаюсь я ![]() ![]() ![]() |
Автор: yaja 6.4.2005, 11:52 |
Честно говоря стоит проверить. ![]() ![]() |
Автор: Dray 6.4.2005, 16:01 | ||||
Именно так. Это такое задание там где я учусь.
STL использовать надо. Т. к. это условие задания. |
Автор: Dray 7.4.2005, 16:27 | ||||
Почти разобрался. Если не
а
То все вроде работает. И элементы разные находятся. Но есть еще вопрос. Как сдесь правильно сделать конструктор копирования, а то, вроде два объекта не должны ссылаться на один другой. Из-за этого могут быть серьезные проблемы. И еще, я прочитал, что в векторе, если использовать erase, то все ссылки после удаленного элемента становятся недействительнами. Если это так, то как тогда удалять из середины вектора? |
Автор: Fire-Plug 13.4.2005, 20:21 | ||||
Oбрати внимание на возвращаемое значение метода vector::erase(). Это - итератор, указыв. на элемент, следующий за удаленным или же на конец вектора. Все ссылки, полученные на основе этого итератора - корректны. К примеру, след. фрагмент вполне работоспособен.
|
Автор: Fantasist 13.4.2005, 23:16 | ||
Каким образом это сформулированно? Вообще, вектор и дерево просто разные структуры, и использовать одно для реализации другого выглядит слегка не логично. |
Автор: Dray 16.4.2005, 17:03 | ||
Спасибо, Fire-Plug за ответ.
Вообще, как бы, в задании это не оговорено. Просто преподаватель дал условие - чтобы был STL. Типа показать что я умею с ним работать. ![]() |