Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
FreeScore
0 / 0 / 1
Регистрация: 02.10.2014
Сообщений: 5
#1

Шаблон функции, использующий поля структуры - C++

09.01.2015, 22:10. Просмотров 342. Ответов 1
Метки нет (Все метки)

В очередной раз у меня возникают проблемы с доступом к полям структуры, и на этот раз уже в функции. У меня есть две (ну, на самом деле больше, но сути это не меняет) функции быстрой сортировки:
http://www.cyberforum.ru/cpp-beginners/thread886706.html
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void quickSort_year(int left, int right) 
{
    int i = left, j = right;
    Video tmp;
    int pivot = salon[(left + right) / 2].year;
    while (i <= j) 
    {
        while (salon[i].year < pivot) i++;
        while (salon[j].year > pivot) j--;
        if (i <= j)
        {
            tmp = salon[i];
            salon[i] = salon[j];
            salon[j] = tmp;
            i++;
            j--;
        }
    };
    if (left < j)
    quickSort_year(left, j);
    if (i < right)
    quickSort_year(i, right);
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void quickSort_numb(int left, int right) 
{
    int i = left, j = right;
    Video tmp;
    int pivot = salon[(left + right) / 2].numb;
    while (i <= j) 
    {
        while (salon[i].numb < pivot) i++;
        while (salon[j].numb > pivot) j--;
        if (i <= j)
        {
            tmp = salon[i];
            salon[i] = salon[j];
            salon[j] = tmp;
            i++;
            j--;
        }
    };
    if (left < j)
    quickSort_numb(left, j);
    if (i < right)
    quickSort_numb(i, right);
}
Массив структур salon - глобальный, если что.
Функции за исключением названий и используемого поля практически идентичны, но я не знаю, как сделать из этого шаблон или хотя бы функцию, которая принимала бы структуру и поле, по которому пошла бы сортировка. Гугл мне не помог, а перечитывать учебник по шаблонам, в которых я мало что понимаю, времени уже маловато. Есть ли способ сократить количество кода до одной универсальной функции, или для сортировки по каждому отдельному полю придется делать ещё одну новую функцию, почти идентичную остальным?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.01.2015, 22:10
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Шаблон функции, использующий поля структуры (C++):

Шаблон структуры
можно ли в с++ создать шаблон структуры? Не класса, именно структуры. Т.е....

Шаблон структуры
Создать шаблон структуры &quot;владелец автомобиля&quot; со следующими полями : фамилия,...

Шаблон структуры данных
Всем привет, в универе дали задание, не понимаю совсем, напишите пожалуйста, ...

Шаблон структуры данных
Задание на курсовую работу: шаблон структуры данных – массив указателей на...

Как работает шаблон структуры static_assert?
Всем привет, объясните пожалуйста подробно почему данный код не компилируется?...

1
casper007
69 / 69 / 58
Регистрация: 12.12.2013
Сообщений: 420
09.01.2015, 22:38 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
void quickSort_numb(int left, int right, int FlagSort) 
{
    int i = left, j = right;
    Video tmp;
if(FlagSort==0) { int pivot = salon[(left + right) / 2].year;}
else                  {int pivot = salon[(left + right) / 2].numb}
    while (i <= j) 
    {
       if(FlagSort==0) 
         {
           while (salon[i].numb < pivot) i++;
           while (salon[j].numb > pivot) j--;
           }
        else 
          {
            while (salon[i].year < pivot) i++;
            while (salon[j].year > pivot) j--;
          }
        if (i <= j)
        {
            tmp = salon[i];
            salon[i] = salon[j];
            salon[j] = tmp;
            i++;
            j--;
        }
    };
    if (left < j)
    quickSort_numb(left, j);
    if (i < right)
    quickSort_numb(i, right);
}

Пожалуй, самый примитивный и ленивый вариант.

Добавлено через 1 минуту
Большой минус заключается в проверках при каждом повторении цикла.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.01.2015, 22:38
Привет! Вот еще темы с решениями:

Шаблон структуры данных - массив указателей на заголовки списков
Мне выдали задание на курсовую работу: &quot;Шаблон структуры данных - массив...

Оператор if и структуры. Возвращение структуры из функции
Здравствуйте, имеется такая вот функция. void InputStructEmployee (int...

Написать функцию сравнения двух структур (шаблон структуры задается произвольно)
ЗАДАНИЕ: Написать функцию сравнения двух структур (шаблон структуры задается...

Написать функцию сравнения двух структур (шаблон структуры задается произвольно)
ЗАДАНИЕ: Написать функцию сравнения двух структур (шаблон структуры задается...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru