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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
Leningradec
0 / 0 / 0
Регистрация: 21.11.2010
Сообщений: 30
#1

Стандартные функторы-адаптеры - C++

25.01.2011, 21:41. Просмотров 1198. Ответов 5
Метки нет (Все метки)

Добрый вечер! Хочу отсортировать контейнер, заполненный указателями на объекты класса Class, критерий сортировки - метод этого класса. При выполнении задачи использовать стандартный функтор-адаптер mem_fun1_t.

Написал код, но он не компилируется, ошибка в 35 строчке. Не знаю, как переписать ее правильно. Помогите, пожалуйста!

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
#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>
 
using namespace std;
 
class Class
{
    int a;
public:
    Class(int a1): a(a1) {}
    ~Class() {}
    void print()
    {
        cout<<a<<" ";
    }
    bool larger(Class x, Class y)
    {
        return x.a>y.a;
    }
};
 
int main()
{
    vector<Class*> vec;
    vec.push_back(&Class(3));
    vec.push_back(&Class(5));
    vec.push_back(&Class(2));
    vec.push_back(&Class(1));
    vec.push_back(&Class(4));
 
    for_each(vec.begin(),vec.end(),mem_fun_t<void,Class>(&Class::print));
    cout<<endl;
    sort(vec.begin(),vec.end(),mem_fun1_t<bool,Class,Class>(&Class::larger));
    for_each(vec.begin(),vec.end(),mem_fun_t<void,Class>(&Class::print));
    return 0;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.01.2011, 21:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Стандартные функторы-адаптеры (C++):

Функторы, алгоритмы и адаптеры - C++
Нужна помощь! 1 Нужно создать multimap и multiset на основе элементов типа класса CPerson, содержащий в своем классе следующие...

Функторы - C++
Не могу понять в чем ошибка. Когда func вызывается в main все в порядке, а когда из функции test, то выдает ошибку &quot;результатом вычисления...

STL, функторы - C++
Всем привет! Вообщем есть код: #include &lt;iostream&gt; #include &lt;algorithm&gt; #include &lt;vector&gt; int main() { std::vector&lt;int&gt;...

Функторы и алгоритмы stl - C++
Добрый день! Интересует такой вопрос. Я хочу, используя стандартный алгоритм стл for_each() и функтор, определить наибольший элемент в...

STL функторы, предикаты - C++
У нас есть: std::multimap&lt;std::string,std::string&gt; map; нужно удалить все повторяющиеся ключи, используя алгоритм с предикатом. ...

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
igorrr37
1647 / 1275 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 7
25.01.2011, 23:06 #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
33
#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>
using namespace std;
 
 
class Class{
        int a;
public:
        Class(int a1):a(a1) {}
        ~Class() {}
        void print(){
            cout<<a<<" ";
        }
        bool larger(Class* p){
            return a>p->a;
        }
};
 
int main(){
    vector<Class*> vec;
    vec.push_back(&Class(3));
    vec.push_back(&Class(5));
    vec.push_back(&Class(2));
    vec.push_back(&Class(1));
    vec.push_back(&Class(4));
 
    for_each(vec.begin(), vec.end(), mem_fun_t<void,Class>(&Class::print));
    cout<<endl;
    sort(vec.begin(), vec.end(), mem_fun1_t<bool,Class,Class*>(&Class::larger));
    for_each(vec.begin(), vec.end(), mem_fun_t<void,Class>(&Class::print));
}
0
Leningradec
0 / 0 / 0
Регистрация: 21.11.2010
Сообщений: 30
25.01.2011, 23:21  [ТС] #3
igorrr37, пробовал так, не помогает ((
0
igorrr37
1647 / 1275 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 7
25.01.2011, 23:32 #4
алгоритм sort работает
1
Leningradec
0 / 0 / 0
Регистрация: 21.11.2010
Сообщений: 30
25.01.2011, 23:39  [ТС] #5
спасибо, нашел ошибку
0
Mr.X
Эксперт С++
3049 / 1694 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
26.01.2011, 14:03 #6
Ну, mem_fun1_t – это вспомогательная функция, для пользователя гораздо удобнее mem_fun:
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
////////////////////////////////////////////////////////////////////////////////////// 
#include <algorithm>
#include <functional>
#include <iostream>
#include <vector>
////////////////////////////////////////////////////////////////////////////////////// 
using namespace std;
//////////////////////////////////////////////////////////////////////////////////////  
class Class
{
    int a;
public:
    Class(int a1): a(a1) 
    {}
    //----------------------------------------------------------------------------
    void print()
    {
            cout << a
                 << " ";
    }
    //----------------------------------------------------------------------------       
    bool larger(Class* y) const
    {
            return a > y->a;
    }        
};
////////////////////////////////////////////////////////////////////////////////////// 
int main()
{
    vector<Class*> vec;
    vec.push_back(&Class(3));
    vec.push_back(&Class(5));
    vec.push_back(&Class(2));
    vec.push_back(&Class(1));
    vec.push_back(&Class(4));
 
    for_each(vec.begin(), vec.end(), mem_fun(&Class::print));
    cout << endl;    
    sort(vec.begin(), vec.end(), mem_fun(&Class::larger));
    for_each(vec.begin(), vec.end(), mem_fun(&Class::print)); 
    std::cout << std::endl;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.01.2011, 14:03
Привет! Вот еще темы с ответами:

Функциональные адаптеры - C++
Для произвольного целочисленного массива данных написать функцию которая уменьшает все элементы в 2 раза с использованием функциональных...

Шаблоны и функторы как callback для класса свойства объекта. Код работает - но не должен - C++
Здравствуйте! Хочу написать реализацию класса свойства на шаблоне. Т.е есть объект, он инициирует необходимые проперти, в графическом...

Пакетированные стандартные блоки - Вложенные стандартные блоки - C++
Кто нибудь может объяснить на примере кода С, как это выглядит?

Функторы, предикаты, функциональные адаптеры, лямбда-функции - C++
Вступление Статья ориентирована на программистов С++, поверхностно знающих/желающих узнать STL, в особенности, с использованием его...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
26.01.2011, 14:03
Ответ Создать тему
Опции темы

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