![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Dray |
|
||||
![]() Материалист ![]() ![]() Профиль Группа: Участник Сообщений: 652 Регистрация: 7.10.2003 Где: г. Всеволожск Репутация: 2 Всего: 6 |
Есть класс
Контейнер:
Нужно из вектора построить дерево по след. алгоритму. - Из списка находится два элемента с наименьшим m_CharCount. - Удаляются из списка. - Создается новый элемент типа CNode, где m_pLeft и m_pRight эти найденные элементы. - m_CharCount нового эл-та - сумма m_CharCount'ов двух найденных эл-в. - Новый элемент добавляется в список. - Следующие наименьшие один или два элемента могут быть эти новые добавленные. - Так повторяется пока список не иссякнится. Помогите пожалуйста. Просто проблемы возникли из-за использования вектора. |
||||
|
|||||
bel_nikita |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 21 Всего: 47 |
|
|||
|
||||
Dray |
|
||||
![]() Материалист ![]() ![]() Профиль Группа: Участник Сообщений: 652 Регистрация: 7.10.2003 Где: г. Всеволожск Репутация: 2 Всего: 6 |
Ну я делал так:
Однако стандартный min_element находит постоянно один и тот же элемент. Т. е. похоже, что erase его вообще не удаляет. ![]() Это сообщение отредактировал(а) Dray - 7.4.2005, 16:09 |
||||
|
|||||
yaja |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 30.3.2005 Где: Санкт-Петербург Репутация: 1 Всего: 1 |
Конечно не мое дело, но по-видимому тебе надо написать сжатие Хафмана(или хотя бы его построение). С использованием спиаска ты сделаещь ето за O(n^2), а можно за O(n*log(n)). Да плюс stl, то сильно он у тебя тормозить будет...
Лучше использовать приоритетную очередь ![]() ![]() ![]() ![]() |
|||
|
||||
DENNN |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 1 Всего: 43 |
Что-то сомневаюсь я ![]() ![]() ![]() |
|||
|
||||
yaja |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 30.3.2005 Где: Санкт-Петербург Репутация: 1 Всего: 1 |
Честно говоря стоит проверить.
![]() ![]() |
|||
|
||||
Dray |
|
||||
![]() Материалист ![]() ![]() Профиль Группа: Участник Сообщений: 652 Регистрация: 7.10.2003 Где: г. Всеволожск Репутация: 2 Всего: 6 |
Именно так. Это такое задание там где я учусь.
STL использовать надо. Т. к. это условие задания. |
||||
|
|||||
Dray |
|
||||
![]() Материалист ![]() ![]() Профиль Группа: Участник Сообщений: 652 Регистрация: 7.10.2003 Где: г. Всеволожск Репутация: 2 Всего: 6 |
Почти разобрался. Если не
а
То все вроде работает. И элементы разные находятся. Но есть еще вопрос. Как сдесь правильно сделать конструктор копирования, а то, вроде два объекта не должны ссылаться на один другой. Из-за этого могут быть серьезные проблемы. И еще, я прочитал, что в векторе, если использовать erase, то все ссылки после удаленного элемента становятся недействительнами. Если это так, то как тогда удалять из середины вектора? |
||||
|
|||||
Fire-Plug |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 102 Регистрация: 15.3.2005 Репутация: -1 Всего: 0 |
Oбрати внимание на возвращаемое значение метода vector::erase(). Это - итератор, указыв. на элемент, следующий за удаленным или же на конец вектора. Все ссылки, полученные на основе этого итератора - корректны. К примеру, след. фрагмент вполне работоспособен.
--------------------
Объясни другому - поймешь сам (Народная примета) |
||||
|
|||||
Fantasist |
|
|||
![]() Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
Каким образом это сформулированно? Вообще, вектор и дерево просто разные структуры, и использовать одно для реализации другого выглядит слегка не логично. -------------------- Волны гасят ветер... |
|||
|
||||
Dray |
|
|||
![]() Материалист ![]() ![]() Профиль Группа: Участник Сообщений: 652 Регистрация: 7.10.2003 Где: г. Всеволожск Репутация: 2 Всего: 6 |
Спасибо, Fire-Plug за ответ.
Вообще, как бы, в задании это не оговорено. Просто преподаватель дал условие - чтобы был STL. Типа показать что я умею с ним работать. ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |