Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 21.11.2010
Сообщений: 30
1

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

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

Author24 — интернет-сервис помощи студентам
Добрый вечер! Хочу отсортировать контейнер, заполненный указателями на объекты класса 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.01.2011, 21:41
Ответы с готовыми решениями:

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

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

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

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

5
2848 / 1997 / 986
Регистрация: 21.12.2010
Сообщений: 3,705
Записей в блоге: 10
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
0 / 0 / 0
Регистрация: 21.11.2010
Сообщений: 30
25.01.2011, 23:21  [ТС] 3
igorrr37, пробовал так, не помогает ((
0
2848 / 1997 / 986
Регистрация: 21.12.2010
Сообщений: 3,705
Записей в блоге: 10
25.01.2011, 23:32 4
алгоритм sort работает
1
0 / 0 / 0
Регистрация: 21.11.2010
Сообщений: 30
25.01.2011, 23:39  [ТС] 5
спасибо, нашел ошибку
0
Эксперт С++
3225 / 1752 / 436
Регистрация: 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
26.01.2011, 14:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.01.2011, 14:03
Помогаю со студенческими работами здесь

Предикаты\Функторы
Здравствуйте, взялся за прочтение алгоритмов STL и наткнулся на такой вопрос, что же такое...

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

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

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


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru