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

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

Войти
Регистрация
Восстановить пароль
 
MousePro
49 / 30 / 1
Регистрация: 25.04.2013
Сообщений: 366
#1

Шаблон как тип контейнера std::set - C++

07.07.2014, 23:25. Просмотров 671. Ответов 6
Метки нет (Все метки)

Кликните здесь для просмотра всего текста
C++ (Qt)
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
template<class T>
int func(T&, int);
typedef std::ostream_iterator<int> out_in;
int main()
{
 
    int xx[20]{1, 2, 3, 4, 5, 6, 7, 7, 8, 2,234,234,2,34,23,423,3,242,42,342};
    int size = func(xx, 20);
    std::copy(xx, xx + 20, out_in(cout, " "));
    cout << "\n" << size << "\n";
 
 
 
 
 
 
 
 
    system("pause");
    return 0;
}
template <class T>
int  func(T &a, int n)
{
    std::set<T> e(a, a+n);
    std::copy(e.begin(), e.end(), a);
    for (auto x = e.size(); x < n; x++)
        a[x] = 0;
    return e.size();
 
}

Подскажите в чем проблема?? Меняю тип контейнеру на int и все работает
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.07.2014, 23:25
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Шаблон как тип контейнера std::set (C++):

На базе контейнера vector из стандартной библиотеки С++ создайте шаблон класса Set, - C++
На базе контейнера vector из стандартной библиотеки С++ создайте шаблон класса Set, в котором каждый объект может храниться только в одной...

STL std::set, std::pair, std::make_pair - C++
Я не знаю как описать тему в двух словах, поэтому не обращайте внимание на название темы. Собственно перейдем к нашим баранам: есть...

Как достать указатель на объект из контейнера set - C++
Имеется вот такой код #include &quot;stdafx.h&quot; #include &lt;string&gt; #include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;set&gt; #include...

Как заставить std::set хранить объекты пользовательского типа? - C++
Здравствуйте. Как заставить set хранить объекты некоторого класса или структуры? #include &lt;iostream&gt; #include &lt;iterator&gt; ...

"range-base for" и проверка на последний элемент в std::set<std::string> - C++
Добрый день. Голова совсем не варит. Как мне организовать простую проверку на послений элемент без введения счетчика а просто сравнивая...

Std::set, как добавить собственную проверку уникальности для класса? - C++
Сразу к делу class Doc { public: Doc(){} ~Doc(){} std::wstring name; int id;

6
Avazart
Нарушитель
Эксперт С++
7231 / 5403 / 291
Регистрация: 10.12.2010
Сообщений: 23,945
Записей в блоге: 17
07.07.2014, 23:43 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <algorithm>
 
 
int main()
{
     const int size= 20;
     int x[size]={1, 2, 3, 4, 5, 6, 7, 7, 8, 2,234,234,2,34,23,423,3,242,42,342};
 
     std::sort(x,x+size);
     int n= std::distance(x,std::unique(x,x+size));
 
     for(int i=0; i<n; ++i)
         std::cout<<i<<") "<<x[i] << std::endl;
 
     getchar();
     return 0;
}
http://www.cplusplus.com/reference/algorithm/unique/?kw=unique
1
MousePro
49 / 30 / 1
Регистрация: 25.04.2013
Сообщений: 366
07.07.2014, 23:49  [ТС] #3
знаю знаю, а что на счет set(a) с ним нельзя использовать шаблон?
вот про std::distance не знал )
0
Avazart
Нарушитель
Эксперт С++
7231 / 5403 / 291
Регистрация: 10.12.2010
Сообщений: 23,945
Записей в блоге: 17
07.07.2014, 23:54 #4
C++
1
2
3
4
5
6
7
8
9
10
template <class T>
int  func(T* a, int n) // Указатель на T (int)
{
        std::set<T> e(a, a+n);
        std::copy(e.begin(), e.end(), a);
        for (auto x = e.size(); x < n; x++)
                a[x] = 0;
        return e.size();
 
}
Или
C++
1
2
3
template <class T>
int  func(T a[], int n)
{/*...*/}
0
MousePro
49 / 30 / 1
Регистрация: 25.04.2013
Сообщений: 366
08.07.2014, 09:07  [ТС] #5
Я это пробовал - не работает...
Компилятор vs 2013
0
DiffEreD
1431 / 768 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
08.07.2014, 10:40 #6
C++
1
2
3
4
5
6
7
8
9
10
11
template <class T>
int func(T& a, int n)
{
   typedef typename std::remove_extent<T>::type type;
 
   std::set<type> e(a, a+n);
   std::copy(e.begin(), e.end(), a);
   for (auto x = e.size(); x < n; x++)
      a[x] = 0;
   return e.size();
}
2
Avazart
Нарушитель
Эксперт С++
7231 / 5403 / 291
Регистрация: 10.12.2010
Сообщений: 23,945
Записей в блоге: 17
08.07.2014, 13:48 #7
DiffEreD, MousePro, хм странно, в С++BuilderXE3 компилится.
0
08.07.2014, 13:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.07.2014, 13:48
Привет! Вот еще темы с ответами:

Шаблон set и структура - как вместе? - C++
Что-то торможу. typedef set&lt;Node&gt; NodeSet; struct Node{ NodeSet input; NodeSet output; }Как это сделать? Ставлю перед...

Тип контейнера как параметр шаблонной функции - C++
Добрый день. Подскажите, пожалуйста, можно ли передавать тип контейнера как параметр в шаблонную функцию? Если да, то как это делается? ...

Итератор контейнера set - C++
Здравствуйте! Каким образом можно изменить значение итератора set на n (кроме вызова ++ n раз). Можно ли преобразовать итератор одного типа...

Передача контейнера set в функцию - C++
Всем здравствуйте! Мне нужно написать функцию которая будет выводить всю информацию которая хранится в контейнере set. Пробовал передавать...


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

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

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