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

> Внимание!

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

2 страниц V < 1 2  
 Ответить  Открыть новую тему 
> Сортировка данных, C++
volvo
сообщение 4.06.2008 17:51
Сообщение #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 - 4.06.2008 18:49
 К началу страницы 
+ Ответить 
Rocket
сообщение 4.06.2008 18:30
Сообщение #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 килобайт ) Кол-во скачиваний: 166
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 4.06.2008 18:49
Сообщение #23


Гость






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

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

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

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


Знаток
****

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

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


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

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

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

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

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

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


Прикрепленные файлы
Прикрепленный файл  TestCool.cpp ( 12.12 килобайт ) Кол-во скачиваний: 178
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 4.06.2008 19:20
Сообщение #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; 
 К началу страницы 
+ Ответить 
Rocket
сообщение 4.06.2008 19:30
Сообщение #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

 

- Текстовая версия 20.07.2025 4:01
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"