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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
Leningradec
0 / 0 / 0
Регистрация: 21.11.2010
Сообщений: 30
25.01.2011, 21:41     Стандартные функторы-адаптеры #1
Добрый вечер! Хочу отсортировать контейнер, заполненный указателями на объекты класса 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.01.2011, 21:41     Стандартные функторы-адаптеры
Посмотрите здесь:

C++ Пакетированные стандартные блоки - Вложенные стандартные блоки
C++ Функторы и алгоритмы stl
C++ Стандартные типы С++
STL, функторы C++
C++ адаптеры
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
igorrr37
 Аватар для igorrr37
1594 / 1222 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 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));
}
Leningradec
0 / 0 / 0
Регистрация: 21.11.2010
Сообщений: 30
25.01.2011, 23:21  [ТС]     Стандартные функторы-адаптеры #3
igorrr37, пробовал так, не помогает ((
igorrr37
 Аватар для igorrr37
1594 / 1222 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
25.01.2011, 23:32     Стандартные функторы-адаптеры #4
алгоритм sort работает
Leningradec
0 / 0 / 0
Регистрация: 21.11.2010
Сообщений: 30
25.01.2011, 23:39  [ТС]     Стандартные функторы-адаптеры #5
спасибо, нашел ошибку
Mr.X
Эксперт С++
 Аватар для Mr.X
2807 / 1583 / 248
Регистрация: 03.05.2010
Сообщений: 3,698
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;
}
Yandex
Объявления
26.01.2011, 14:03     Стандартные функторы-адаптеры
Ответ Создать тему
Опции темы

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