![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Warchief |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 24.5.2007 Репутация: нет Всего: 3 |
Помогите пожалуйста!!!
Задача написать програму для сортировке чего-угодно методом 'quick sort', с использованием template классов. В принципе сам алгоритм не проблема(надеюсь). Не знаю просто как вызвать методы класса в int main. Вот примерно структура программы(функции, которые пустые, я напишу сам). Объясните как мне вызвать эти функции в int main пожалуйста. Вот код:
Спасибо зарание!!! Это сообщение отредактировал(а) Warchief - 24.5.2007, 11:17 |
|||
|
||||
| v_nikolaev |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 6.5.2007 Репутация: нет Всего: нет |
массив то объявлен как локальная переменная для функции и он убивает параметр A или я что-то недоглядел?
Добавлено @ 11:25 generateAscending(А,int n) зачем в вызове функции указывать int? Добавлено @ 11:33 в теле функции нужно убрать определение массива. Array<int> A(n); Надо будет добавить функцию-член класса Array, которая увеличивает размер массива и использовать её. Объявляешь Array в main - передаёшь его нужной функции класса Sort... Array<Item*>& A - а почему не Array<Item>& A. Тут получается специализация для указателей, разве не так? Это сообщение отредактировал(а) v_nikolaev - 24.5.2007, 11:34 |
|||
|
||||
| Warchief |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 24.5.2007 Репутация: нет Всего: 3 |
Если я вызываю функцию так: t.generateAscending(А,n) то компайлер говорит:
quicksort.cpp(55) : error C2065: 'А' : undeclared identifier quicksort.cpp(55) : error C2065: 'n' : undeclared identifier Так как мне быть? я уже просто измучался с этим вызовом. :( Добавлено через 2 минуты и 3 секунды
Так посртавленно задание. |
|||
|
||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
||||
|
||||
| Warchief |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 24.5.2007 Репутация: нет Всего: 3 |
Всё окончательно запутался :( А разве это не определение?
Это сообщение отредактировал(а) Warchief - 24.5.2007, 11:43 |
|||
|
||||
| v_nikolaev |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 6.5.2007 Репутация: нет Всего: нет |
Что-то такое можно предложить:
Это сообщение отредактировал(а) v_nikolaev - 24.5.2007, 11:54 |
|||
|
||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
нет. Это не то. или я ничего не понял или тебе еще надо писать частичную специализацию Array для указателей вот так тот кусок который у тебя написан будет работать, но для int , а не для int*
|
|||
|
||||
| v_nikolaev |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 6.5.2007 Репутация: нет Всего: нет |
Кстати, зачем сорт темплейтный?
|
|||
|
||||
| Warchief |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 24.5.2007 Репутация: нет Всего: 3 |
Точно не знаю сам(не сказали), дали имена функциий и сказали допишите программу. В програме должно быть несколько вариантов быстрой сортироки(различие только в выборе опорного элемента). Может быть поэтому... Подскажите, пожалуйста всё-таки, чего не хватает чтобы работали функции с generateAscending(Array<Item*>& A,int n), а не generateAscending(Array<Item>& A,int n). Т.к. иначе задание не выполненно. :( Пасиб вам за помощь!!! Это сообщение отредактировал(а) Warchief - 24.5.2007, 12:06 |
|||
|
||||
| Fazil6 |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
видимо, чтобы связать Sort и Array может быть вот так тебе надо?
Добавлено @ 12:17 правда тут еще надо деструктор
Это сообщение отредактировал(а) Fazil6 - 24.5.2007, 12:19 |
||||
|
|||||
| Warchief |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 24.5.2007 Репутация: нет Всего: 3 |
||||
|
||||
| v_nikolaev |
|
||||||||||
|
Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 6.5.2007 Репутация: нет Всего: нет |
суть такая (задание немного кривое). Вообще сортировка иногда производится над указателями на объекты, так как последние могут оказаться большими. (А в случае инта - объект такой же, как и указатель по размеру). Темплейтный Sort, я могу объяснить лишь как способ не использовать функцию swap, о которой я упоминал. А вообще все сортировки могли бы быть и просто шаблонными функциями а Sort - нетемплейтным. Если темплейтный, то generateAscending(Array<Item*>& A,int n) не является специализацией для указателей - я слегка ошибся, просто не увидел сразу, что Sort - шаблон. Оставляешь Sort шаблоном Функцию generateAscending пишешь так: void generateAscending(Array<Item*>& A,int n) { // Если n больше реальной длины массива, и указатели // ни на что не указывают, то мы получим падающую прогу // хрень в общем. for (int i = 0; i < n; i++) *A[i] = i+1; for (int i = 0; i < n; i++) cout<<A[i]<<" "; } Но вообще то всё это не очень умно и работать в нашей программе это не будет - ведь объекты, указатели на которые хранятся в массиве, надо сами где-то хранить... generateAscending - тогда имеет бессмысленый параметр размера массива - мы ведь не можем его просто так увеличить, да ещё и присвоить значения несуществующим элементам. бардак какой-то в задании. Добавлено через 2 минуты и 35 секунд
в деструкторе надо убивать ещё элементы массива. а зачем связывать класс сорт и массив??? |
||||||||||
|
|||||||||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
да, надо, но возлагать на контейнер в данном случае не нужно, как впрочем и заполнение его возлагать на класс Sort. Array не знает что в нем хранится и если заполняли его оператором new вне контейнера, то и delete для конкретного элемента нужно делать вне Array до его удаления |
|||
|
||||
| Warchief |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 24.5.2007 Репутация: нет Всего: 3 |
Вот с вашей помощью вроде написал:
Посмотрите пожалуйста, может нужно что-нибудь подправить? Есть ещё вопрос, после того как я массив сгенерирован, как мне сделать с него копию? Методы partition1..3 отличаются только тем,что элемент пивот вцчисляется по разному. функции qSort1...3 вызывают соответствующий метод partition
|
|||
|
||||
| v_nikolaev |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 6.5.2007 Репутация: нет Всего: нет |
for (int j = l; j <= r-1; j++)
так разве пишут в C-ях? for (int j = l; j < r; j++) разницы то нет, но стиль правильнее, имхо |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |