0 / 0 / 0
Регистрация: 21.11.2010
Сообщений: 30
1

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

25.01.2011, 21:41. Показов 1924. Ответов 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
25.01.2011, 21:41
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.01.2011, 21:41
Ответы с готовыми решениями:

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

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

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

5
 Аватар для igorrr37
2865 / 2013 / 989
Регистрация: 21.12.2010
Сообщений: 3,720
Записей в блоге: 15
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
 Аватар для igorrr37
2865 / 2013 / 989
Регистрация: 21.12.2010
Сообщений: 3,720
Записей в блоге: 15
25.01.2011, 23:32 4
алгоритм sort работает
1
0 / 0 / 0
Регистрация: 21.11.2010
Сообщений: 30
25.01.2011, 23:39  [ТС] 5
спасибо, нашел ошибку
0
Эксперт С++
 Аватар для Mr.X
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.01.2011, 14:03
Помогаю со студенческими работами здесь

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

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

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

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

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


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

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

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Опции темы

Новые блоги и статьи
Микросервис с нуля на Go с Kafka
stackoverflow 12.02.2025
Когда я впервые столкнулся с необходимостью разделить монолитное приложение на микросервисы, передо мной встал вопрос выбора правильных технологий и подходов. После долгих экспериментов с различными. . .
Микросервис с нуля на C# с RabbitMQ
stackoverflow 12.02.2025
Переход от монолитной архитектуры к микросервисной - это не просто модное веяние, а закономерный этап эволюции программных систем. В отличие от монолита, где все компоненты тесно связаны между собой. . .
Docker для начинающих
stackoverflow 12.02.2025
В современном мире разработки программного обеспечения все чаще возникает необходимость быстро и надежно разворачивать приложения в различных средах. Разработчики постоянно сталкиваются с проблемой. . .
Создание бота для Телеграм на C#
stackoverflow 12.02.2025
В современном мире корпоративных коммуникаций Telegram-боты становятся незаменимым средством автоматизации бизнес-процессов и взаимодействия с сотрудниками. Как создать такого бота, который сможет. . .
Операторы сравнения (== и ===) в JavaScript
hw_wired 12.02.2025
JavaScript предоставляет два основных оператора сравнения - оператор нестрогого равенства (==) и оператор строгого равенства (===). На первый взгляд они могут показаться очень похожими, но их. . .
Определение адреса, откуда репозиторий Git был клонирован
hw_wired 12.02.2025
Система контроля версий Git хранит всю информацию о репозитории в специальной директории . git, включая данные об удаленных источниках. Эта информация необходима для синхронизации изменений между. . .
Объединение нескольких коммитов Git в один
hw_wired 12.02.2025
Представьте, что вы работаете над новой функциональностью и создали десяток небольших коммитов: исправление опечатки, форматирование кода, добавление комментариев, реализация основной логики. Каждый. . .
Как добавить локальную ветку в удалённый репозиторий Git
hw_wired 12.02.2025
Локальная ветка в Git - это изолированная линия разработки, существующая только на вашем компьютере. Представьте себе дерево с множеством веток - каждая ветка может расти в своем направлении, не. . .
Статическое отражение в C++
stackoverflow 12.02.2025
Статическое отражение представляет собой мощный механизм, позволяющий программам анализировать и манипулировать своей собственной структурой во время компиляции. Эта возможность открывает. . .
C++ в 21 веке - Бьярне Страуструп
stackoverflow 12.02.2025
В современном мире разработки программного обеспечения C++ продолжает оставаться одним из ключевых языков программирования, несмотря на свой солидный возраст - более 45 лет с момента создания. За это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru