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

Шаблон функции, принимающей обычные массивы и объекты - C++

Восстановить пароль Регистрация
 
tramp_1-3
 Аватар для tramp_1-3
14 / 14 / 1
Регистрация: 13.10.2012
Сообщений: 428
18.07.2013, 09:18     Шаблон функции, принимающей обычные массивы и объекты #1
Нужно чтобы функция одинаково хорошо принимала массив long и объект vector <string>, чтобы затем удалить повторяющиеся элементы, отсортировать и вернуть количество элементов в новом массиве. Как лучше всего обеспечить приём аргументов, итераторами? Программа:
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <algorithm>
#include <set>
#include <vector>
#include <iterator>
 
using std :: cout;
using std :: cin;
using std :: vector;
using std :: string;
using std :: iterator;
 
template <class T>
int reduce (T * start, T * end);
 
int main () {
    long ar [6];
    cout << "Enter 6 elements of array: ";
    int i = 0;
    while ( i++ < 6 && cin >> ar [i]  )
        continue;
    cout << "Reduced array: " << reduce (ar, ar + 6) << " elements.\n";
    vector <string> sarray;
    string temp;
    cout << "Enter 6 elements of array: ";
    i = 0;
    while ( i++ < 6 && cin >> temp  )
        sarray.push_back (temp);
    cout << "Reduced array: " << reduce (sarray.begin (), sarray.end ()) << " elements.\n";
    cin.ignore (1);
    cin.get ();
    return 0;
};

Функция:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
template <class T>
int reduce (T * start, T * end) {
    std :: set <T> newarr (start, end);
    copy ( newarr.begin (), newarr.end (), std :: ostream_iterator <T, char> (cout, " ") );
    return newarr.size ();
};
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.07.2013, 09:18     Шаблон функции, принимающей обычные массивы и объекты
Посмотрите здесь:

Динамическая память. Функции. Массивы .Объекты C++
Зачем нужны обычные массивы, если есть динамические? C++
C++ error C2661: pow: нет перегруженной функции, принимающей 1 аргументов
Функция создает объекты и указателями на них заполняет массив. При выходе из функции вызываются деструкторы объектов. Как сохранить объекты? C++
нет перегруженной функции, принимающей 3 аргументов C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
18.07.2013, 09:28     Шаблон функции, принимающей обычные массивы и объекты #2
C++
1
T reduce (T start, T end)
Внутри, если не требуется все делать руками, то std::sort + std::unique.
tramp_1-3
 Аватар для tramp_1-3
14 / 14 / 1
Регистрация: 13.10.2012
Сообщений: 428
18.07.2013, 09:42  [ТС]     Шаблон функции, принимающей обычные массивы и объекты #3
Цитата Сообщение от 0x10 Посмотреть сообщение
T reduce (T start, T end)
не вариант, оочень много новых ошибок, самая понятная invalid conversion from `long int' to `long int*'

с std::unique я не разобрался как работать, она же вроде на конец диапазона указывает

Добавлено через 59 секунд
Итераторами это можно как-нибудь осуществить?
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
18.07.2013, 09:48     Шаблон функции, принимающей обычные массивы и объекты #4
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
#include <algorithm>
#include <iostream>
#include <vector>
 
template<typename T>
T reduce(T first, T last)
{
    std::sort(first, last);
    return std::unique(first, last);
}
 
int main()
{
    std::vector<int> v = {
        1, 3, 5, 4, 2,
        1, 3, 5, 4, 2,
        1, 3, 5, 4, 2,
        1, 3, 5, 4, 2,
        1, 3, 5, 4, 2};
 
    std::vector<int>::const_iterator end = reduce(v.begin(), v.end());
 
    for (std::vector<int>::const_iterator it = v.begin(); it != end; ++it)
    {
        std::cout << *it << " ";
    }
    std::cout << std::endl;
}
Yandex
Объявления
18.07.2013, 09:48     Шаблон функции, принимающей обычные массивы и объекты
Ответ Создать тему
Опции темы

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