IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

2 страниц V < 1 2  
 Ответить  Открыть новую тему 
> Сортировка данных, C++
сообщение
Сообщение #21


Гость






Что значит
Цитата
чтобы была возможность работы с данными вещественного, строкового и т.п. типа
? Если ты BubbleSortVer2<int> поменяешь на BubbleSortVer2<char>, твоя программа не будет с ним работать? Или ты хочешь сделать еще одно меню: сначала пользователь выбирает с каким типом работать, а потом - выбирает метод сортировки массива?

Тогда тебе всю работы по вызову сортировок надо вынести в шаблонную функцию:
template <class T>
void work() {
// и здесь производить все операции, которые пользователь выберет
// из меню Message(), инстанцируя шаблоны сортировок типом T, например:

T a[size];
// для инициализации массива "a" можно написать шаблонную
// функцию Random, и сделать ее явные специализации для любого
// типа, с которым ты хочешь работать...
// Ну, а потом - ...

int time=GetTickCount();
BubbleSortVer2<T>(a, size);
time=GetTickCount()-time;
}


В основной же программе:

int main() {
cout << "1: int; 2: double; 3: char; 4: string" << endl;
cin >> choice;

switch(choice) {
case 1:
Work<int>();
break;
case 2:
Work<double>();
break;
case 3:
Work<char>();
break;
case 4:
Work<string>();
break;
}
}
Идея понятна?

Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #22


Знаток
****

Группа: Пользователи
Сообщений: 306
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


Цитата(volvo @ 4.06.2008 18:51) *

Что значит ? Если ты BubbleSortVer2<int> поменяешь на BubbleSortVer2<char>, твоя программа не будет с ним работать? Или ты хочешь сделать еще одно меню: сначала пользователь выбирает с каким типом работать, а потом - выбирает метод сортировки массива?

Тогда тебе всю работы по вызову сортировок надо вынести в шаблонную функцию:
template <class T>
void work() {
// и здесь производить все операции, которые пользователь выберет
// из меню Message(), инстанцируя шаблоны сортировок типом T, например:

T a[size];
// для инициализации массива "a" можно написать шаблонную
// функцию Random, и сделать ее явные специализации для любого
// типа, с которым ты хочешь работать...
// Ну, а потом - ...

int time=GetTickCount();
BubbleSortVer2<T>(a, size);
time=GetTickCount()-time;
}


В основной же программе:

int main() {
cout << "1: int; 2: double; 3: char; 4: string" << endl;
cin >> choice;

switch(choice) {
case 1:
Work<int>;
break;
case 2:
Work<double>;
break;
case 3:
Work<char>;
break;
case 4:
Work<string>;
break;
}
}
Идея понятна?

Идею понял, код изменил. Но компилятор выдает ошибку при обращение к Work<...>, в чём причина? И ещё вот, мне не особо понятно как со строками использовать эти методы сортировок, или есть какие-то особенности?


Прикрепленные файлы
Прикрепленный файл  TestCool.cpp ( 12.01 килобайт ) Кол-во скачиваний: 142
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #23


Гость






Ну да, я накосячил, забыл вызов функции... Поправлю в предыдущем посте...

Кстати, у тебя в main() лишняя закрывающая скобка... И еще, чтобы программа компилировалась, надо явно задать специализацию SetMin() для типа string:

void SetMin(string& val) {
val = "";
}

, иначе будет ошибка...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #24


Знаток
****

Группа: Пользователи
Сообщений: 306
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


Цитата(volvo @ 4.06.2008 19:49) *

Ну да, я накосячил, забыл вызов функции... Поправлю в предыдущем посте...

Кстати, у тебя в main() лишняя закрывающая скобка... И еще, чтобы программа компилировалась, надо явно задать специализацию SetMin() для типа string:

void SetMin(string& val) {
val = "";
}

, иначе будет ошибка...

Изменил, вроде всё работает)...только теперь не понятно вот что: при размерности массива, например 25000, выкидывает из программы. Из-за чего это?...причем предыдущий вариант с таким значением работал...


Прикрепленные файлы
Прикрепленный файл  TestCool.cpp ( 12.12 килобайт ) Кол-во скачиваний: 155
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #25


Гость






blink.gif Ты чего творишь?

int ch,size;
// Это как понимать? Сначала описываешь массив непонятно какого размера ...
T a[size];

// и только потом вводишь собственно размер?
cout<<"Please, enter the size of massive to sort!"<<endl;
cin>>size;


Я бы сделал вот так:
int ch, size;
cout<<"Please, enter the size of massive to sort!"<<endl;
cin>>size;

T *a = new T[size];
... // здесь работа с массивом, ничего не меняется
delete a;
 К началу страницы 
+ Ответить 
сообщение
Сообщение #26


Знаток
****

Группа: Пользователи
Сообщений: 306
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


Цитата(volvo @ 4.06.2008 20:20) *

blink.gif Ты чего творишь?

int ch,size;
// Это как понимать? Сначала описываешь массив непонятно какого размера ...
T a[size];

// и только потом вводишь собственно размер?
cout<<"Please, enter the size of massive to sort!"<<endl;
cin>>size;


Я бы сделал вот так:
int ch, size;
cout<<"Please, enter the size of massive to sort!"<<endl;
cin>>size;

T *a = new T[size];
... // здесь работа с массивом, ничего не меняется
delete a;


Идеальна! Спасибо за помощь! good.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

2 страниц V < 1 2
 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 26.01.2021 19:59
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name