Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 4.75
Luna17
3 / 3 / 1
Регистрация: 09.03.2010
Сообщений: 95
#1

Шаблон функции - C++

03.05.2010, 23:52. Просмотров 1057. Ответов 19
Метки нет (Все метки)

ПРОГА
Организовать шаблон функции для сортировки массива, предусмотрев, параметр заданный по умолчанию. По умолчанию порядок сортировки от минимального к максимальному элементу. Вызов функции сортировки произвести для целочисленных, вещественных и символьных элементов.

Помогите составить прогу, или покажите где можно подобное посмотреть
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.05.2010, 23:52     Шаблон функции
Посмотрите здесь:

шаблон функции. Задачей функции является округление вышеуказанного вещественного числа с заданной точностью - C++
Написать функцию, которая принимает в качестве параметров вещественное число и количество знаков после десятичной точки, которые должны...

Перегруженные функции и шаблон функции - C++
Указания: 1. Перегрузить функции для массивов типа char, int, и double. 2. Инстанцировать шаблон функции для типов char, int, и double....

Шаблон функции - C++
Привет, есть функции cinFloat() и cinInt() в коде, их я бы хотел заменить на шаблон функции(потому что они одинаковые, просто работают с...

Шаблон функции - C++
компилятор пишет, что неудается составить аргумент шаблон для "L", как это можно исправить?? template <class T, class L> L Sum(T x1,...

Шаблон функции - C++
Всем доброй ночи. Помогите, пожалуйста, написать шаблон функции count() для подсчета числа появлений некоторого значения в массиве. В...

Шаблон функции - C++
Не понимаю в чем проблема, пытаюсь реализовать шаблон функции которая возвращает указатель на указанное значение из заданого интервала ...

Шаблон функции - C++
Написать шаблон функции для вычисления суммы элементов, находящихся между первым и последним нулевыми элементами. Помогите пожалуста! ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
PointsEqual
ниначмуроФ
834 / 518 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
04.05.2010, 00:13     Шаблон функции #2
шаблон

C++
1
2
3
template<class T>
void sort(T& mas, int t=0){
}
CyBOSSeR
Эксперт C++
2300 / 1670 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
04.05.2010, 01:11     Шаблон функции #3
PointsEqual, не угадал.
Luna17, вот шаблонная функция сортировки пузырьком:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
template<class T>
void Swap(T& left, T& right) {
  T tmp   = left;
    left  = right;
    right = tmp; 
}
 
template<class T>
void SortExchange(T* arr, int size, int sort_up = 1) {
  for (int i = 1; i < size; ++i)
    for (int j = size - 1; j >= i; --j)
      if (sort_up == 1? arr[j-1] > arr[j] : arr[j - 1] < arr[j])
        Swap(arr[j], arr[j - 1]);
}
Использовать точно также как и обычные функции:
C++
1
2
int arr[] = {1, 4, 2, 8 , 5, 7, 3, 6, 4};
SortExchange(arr, sizeof(arr) / sizeof(arr[0]));
PointsEqual
ниначмуроФ
834 / 518 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
04.05.2010, 12:11     Шаблон функции #4
CyBOSSeR, почиму же, мой шаблон тоже работает
CyBOSSeR
Эксперт C++
2300 / 1670 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
04.05.2010, 12:24     Шаблон функции #5
PointsEqual, я себе слабо представляю как. Приведи пример.
PointsEqual
ниначмуроФ
834 / 518 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
04.05.2010, 12:31     Шаблон функции #6
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
#include <iostream>
 
using namespace std;
 
template<class T>
void Swap(T& left, T& right) {
  T tmp   = left;
    left  = right;
    right = tmp;
}
 
template<class T>
void sort(T& mas, int t=0){
    int size=sizeof(mas)/sizeof(mas[0]);
    for (int i = 1; i < size; ++i)
    for (int j = size - 1; j >= i; --j)
      if (t == 1 ? mas[j-1] > mas[j] : mas[j - 1] < mas[j])
      Swap(mas[j], mas[j - 1]);
 
}
 
int main()
{
 
    int mas[5]={4,9,2,6,1};
    sort(mas,0);
    for (int i=0; i<5; i++)
    cout<<mas[i];
 
    return 0;
}
CyBOSSeR
Эксперт C++
2300 / 1670 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
04.05.2010, 12:56     Шаблон функции #7
PointsEqual, этот вариант не работает для массивов, память под которые выделена динамически и вообще не является сортировкой массивов, а любого объекта поддерживающего индексацию.
Luna17
3 / 3 / 1
Регистрация: 09.03.2010
Сообщений: 95
04.05.2010, 22:04  [ТС]     Шаблон функции #8
CyBOSSeR, пасяб за советы, но я уже сделала сегодня на паре, вот то что получилось, мож кому пригодится (кста оч помогла прошлая прога с которой ты мне помогал)
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
// tgtf.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <conio.h>
#include <iostream>
#include <stdio.h>
 
#include <string.h> 
#include <iomanip>
 
#include <locale.h>
 
using namespace std;
 
template <class Type>
void Sort(Type *x, int n)
{
Type tmp;
for (int i = 1; i < n; ++i)
    for (int j = n - 1; j >= i; --j)
      if ( x[j - 1] > x[j] ) 
      {
        Type tmp = x[j - 1];
            x[j - 1] = x[j];
            x[j] = tmp;
      }
}
int main()
{
 setlocale (LC_ALL, "Russian");
    const int n=10;
 
    char char_x[n] = {'b', 'c', 'z', 'c', 'd', 'r'};
   
 
   printf ("Исходный символьный массив \n");
   for (int i = 0; i < n; ++i)
   cout << char_x[i] << " ";
   cout << endl;
 
   printf ("Cортировка по возрастанию символьного массива \n");
   Sort(char_x, n);
   for (int i = 0; i < n; ++i)
   cout << char_x[i] << " ";
   cout << endl;
 
   int int_x[] = {5, 1, 4, 6, 3, 3, 6, 7, 8, 9, 0};
  
 
   printf ("Исходный целочисленный массив \n");
   for (int i = 0; i < n; ++i)
   cout << int_x[i] << " ";
   cout << endl;
 
   printf ("Сортировка по возрастнию целочисленого массива \n");
   Sort(int_x , n);
   for (int i = 0; i < n; ++i)
   cout << int_x[i] << " ";
   cout << endl;
   
   double double_x[] = {5.8, 1.7, 4.3, 6.3, 5.9, 4.6, 6.1, 5.7, 1.3, 0.3 };
 
   printf ("Исходный вещественный массив \n");
   for (int i = 0; i < n; ++i)
   cout << double_x[i] << " ";
   cout << endl;
 
   printf ("Сортировка по возрастнию вещественный массива \n");
   Sort(double_x , n);
   for (int i = 0; i < n; ++i)
   cout << double_x[i] << " ";
   cout << endl;
 
    _getch();
  return 0;
}
CyBOSSeR
Эксперт C++
2300 / 1670 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
04.05.2010, 23:06     Шаблон функции #9
Luna17, кое что лишнее:
Цитата Сообщение от Luna17 Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
template <class Type>
void Sort(Type *x, int n)
{
Type tmp; // <-- эту строку можно и нужно убрать
for (int i = 1; i < n; ++i)
    for (int j = n - 1; j >= i; --j)
      if ( x[j - 1] > x[j] ) 
          {
        Type tmp = x[j - 1];
            x[j - 1] = x[j];
            x[j] = tmp;
          }
}
Luna17
3 / 3 / 1
Регистрация: 09.03.2010
Сообщений: 95
05.05.2010, 18:15  [ТС]     Шаблон функции #10
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Luna17, кое что лишнее:
ой, точно, с переменными чуть намудрила, но ведь работает же
PointsEqual
ниначмуроФ
834 / 518 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
05.05.2010, 19:14     Шаблон функции #11
CyBOSSeR,

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
#include <iostream>
void bubbleSort(int& mas, int size){
    int tmp;
    for( int i=0; i < size; i++ ){
        for( int j=i; j>=0; --j){
            if ( mas[j] > mas[j+1] ){
                tmp=mas[j];
                mas[j]=mas[j+1];
                mas[j+1]=tmp;
            }
        }
    }
}
 
int main()
{
    int mas[5]={7,5,1,8,2};
    bubbleSort(mas,5);
 
    for( int i=0; i < 5; i++ )
    cout<<mas[i];
 
    return EXIT_SUCCESS;
}
а я тут массив по ссылке передаю, а в мэйне ошибка
invalid types `int[int]' for array subscript (строка 18)

чего не так то
CyBOSSeR
Эксперт C++
2300 / 1670 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
05.05.2010, 21:06     Шаблон функции #12
PointsEqual, массивы передаются по указателю на первый элемент. int& mas - это ссылка на переменную целого типа, а не массива.
Измени int& mas на int* mas во второй строке и все должно быть нормально.
PointsEqual
ниначмуроФ
834 / 518 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
05.05.2010, 22:10     Шаблон функции #13
CyBOSSeR, cо статическим понятно, спасибо, а с динамическим?


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
33
34
35
36
37
38
39
40
#include <iostream>
#include <vector>
 
 
template<class T>
void bubbleSort(T* mas, int size){
    T tmp;
    for( int i=0; i < size; i++ ){
        for( int j=i; j>=0; --j){
            if ( mas[j] > mas[j+1] ){
                tmp=mas[j];
                mas[j]=mas[j+1];
                mas[j+1]=tmp;
            }
        }
    }
}
 
 
 
 
 
int main()
{
 
    std::vector<int> mas(5);
    mas[0]=6;
    mas[1]=3;
    mas[2]=1;
    mas[3]=5;
    mas[4]=7;
 
    bubbleSort(mas,5);
 
 
    for( int i=0; i < 5; i++ )
    std::cout<<mas[i];
 
    return EXIT_SUCCESS;
}
ошибка no matching function for call to `bubbleSort(std::vector<int, std::allocator<int> >&, int)' (строка 33)
CyBOSSeR
Эксперт C++
2300 / 1670 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
06.05.2010, 01:01     Шаблон функции #14
PointsEqual, std::vector это не массив.
Цитата Сообщение от PointsEqual Посмотреть сообщение
cо статическим понятно, спасибо, а с динамическим?
Точно также.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.05.2010, 01:28     Шаблон функции
Еще ссылки по теме:

Шаблон функции - C++
Объясните в чем ошибка) Задание: 2. Примером удачного применения функции шаблона есть функция find (), которая ищет элемент object в...

c++ шаблон функции - C++
Есть некая структура, которая хранит информацию о фигурах (площадь основания, радиус и т.д.). Нужно описать шаблонную функцию, которая в...

Шаблон функции - C++
Создать шаблон функции, выполняющей Комбинированный метод быстрой сортировки с методом «пузырька» Протестировать шаблон для массивов с...

шаблон функции - C++
Здрасти. Как правильно написать шаблон ,например, этой функции? int **newmatrix(int row, int col){ int **matrix=new int*; ...

Шаблон функции - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; template &lt;class T&gt; T abs(T n) { return static_cast&lt;unsigned...


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

Или воспользуйтесь поиском по форуму:
PointsEqual
ниначмуроФ
834 / 518 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
06.05.2010, 01:28     Шаблон функции #15
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
std::vector это не массив.
а что это? разве не динамический массив?
Yandex
Объявления
06.05.2010, 01:28     Шаблон функции
Ответ Создать тему
Опции темы

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