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

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

Восстановить пароль Регистрация
 
Maxvarlamov
1 / 1 / 0
Регистрация: 25.01.2010
Сообщений: 18
22.02.2010, 17:55     Шаблонные функции #1
Помогите, пожалуйста, реализовать шаблонную функцию, которая переставляет элементы в массиве
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.02.2010, 17:55     Шаблонные функции
Посмотрите здесь:

Шаблонные функции C++
C++ Шаблонные функции
C++ Шаблонные функции
Шаблонные функции C++
C++ Шаблонные функции
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ISergey
Maniac
Эксперт С++
 Аватар для ISergey
1330 / 863 / 50
Регистрация: 02.01.2009
Сообщений: 2,621
Записей в блоге: 1
22.02.2010, 18:06     Шаблонные функции #2
Цитата Сообщение от Maxvarlamov Посмотреть сообщение
Помогите, пожалуйста, реализовать шаблонную функцию, которая переставляет элементы в массиве
В смысле переставляет.. то есть как?
Maxvarlamov
1 / 1 / 0
Регистрация: 25.01.2010
Сообщений: 18
22.02.2010, 18:08  [ТС]     Шаблонные функции #3
переставляет --- меняет местами элементы
HIMen
 Аватар для HIMen
4103 / 1352 / 39
Регистрация: 12.04.2009
Сообщений: 2,346
22.02.2010, 18:11     Шаблонные функции #4
C++
1
2
3
4
5
template<class T> 
void Swap(T &a, T &b)
{
    a ^= b ^= a ^= b;
}
ISergey
Maniac
Эксперт С++
 Аватар для ISergey
1330 / 863 / 50
Регистрация: 02.01.2009
Сообщений: 2,621
Записей в блоге: 1
22.02.2010, 18:17     Шаблонные функции #5
Тоесть два элемента?..
Если да то вот..
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
 
template <typename T>
void swap(T &a, T &b){
    T buff = a;
    a = b;
    b = buff;
}
int main(){
 
    int a = 10, b = 20;
    float f1 = 1112.2, f2 = 3333.33;
 
    swap(a, b);
    std::cout << a << '\n' << b << '\n';
 
    swap(f1, f2);
    std::cout << f1 << '\n' << f2 << '\n';
 
    return 0;
}
Добавлено через 2 минуты
HIMen, Не везде прокатит...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
template<class T> 
void Swap(T &a, T &b)
{
    a ^= b ^= a ^= b;
}
 
int main(){
 
    std::string s1 = "aaaa", s2 = "bbbbb";
 
    Swap(s1, s2); // ошибка будет...
 
    return 0;
}
Maxvarlamov
1 / 1 / 0
Регистрация: 25.01.2010
Сообщений: 18
22.02.2010, 18:36  [ТС]     Шаблонные функции #6
Переставляет это значит a0=a4,a1=a3,a2=a2,a3=a1,a4=a0
ISergey
Maniac
Эксперт С++
 Аватар для ISergey
1330 / 863 / 50
Регистрация: 02.01.2009
Сообщений: 2,621
Записей в блоге: 1
22.02.2010, 18:49     Шаблонные функции #7
Переставляет это значит a0=a4,a1=a3,a2=a2,a3=a1,a4=a0
Раньше не мог сказать?
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>
 
template <typename It>
void swap(It &_first, It &_last){
    It buff = _first;
    _first  = _last;
    _last   = buff; 
}
template <typename It>
void rotate_arr(It _first, It _last){
    for (; _first != _last && _first != --_last; ++_first)
        swap(*_first, *_last);
}
 
 
int main(){
 
    int arr[5] = {1,2,3,4,5};
    rotate_arr(arr, arr + 5);
 
    for(int i = 0; i < 5; ++i) std::cout << arr[i] << ' ';
 
    return 0;
}
Maxvarlamov
1 / 1 / 0
Регистрация: 25.01.2010
Сообщений: 18
22.02.2010, 19:18  [ТС]     Шаблонные функции #8
А как сделать так, чтобы можно было вводить и целые, и вещественные (double) значения
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.02.2010, 19:49     Шаблонные функции
Еще ссылки по теме:

Шаблонные функции C++
C++ шаблонные функции
Шаблонные функции C++

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

Или воспользуйтесь поиском по форуму:
insideone
Модератор
Автор FAQ
 Аватар для insideone
3619 / 897 / 47
Регистрация: 10.01.2010
Сообщений: 2,420
22.02.2010, 19:49     Шаблонные функции #9
А как сделать так, чтобы можно было вводить и целые, и вещественные (double) значения
Вводить можно что угодно - а вот храниться должно все в одном массиве. Т.к. int не может хранить значения после запатой заводите массив double - те числа которые вы введете целочисленными просто будут иметь нули после запятой.

C++
1
2
3
4
5
6
7
#define N 7
int main(){
    double x[N];
    for (int i = 0; i < N; i++)
        cin >> x[i];
return 0;
}
Если хочется чтобы числа содержащие только целую часть выводились без "хвоста" можно делать проверку на целочисленность и если она пройдена
C++
1
int temp = x[i]; cout << temp;
Yandex
Объявления
22.02.2010, 19:49     Шаблонные функции
Ответ Создать тему
Опции темы

Текущее время: 15:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru