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

Пара вопросов по функторам stl

21.01.2011, 00:54. Показов 1281. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!
У меня возникло пара вопросов по функторам. Может кто чего подскажет?
Вопрос 1.
В нижеследующем коде в стандартном алгоритме for_each используется функтор IsEvan. Почему мы можем использовать функтор таким вот образом? Разве не логичней сначала создать объект класса IsEvan и именно его использовать в алгоритме?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class IsEvan
{
public:
    void operator()(int num)
    {
        if(num%2==0)
            cout<<num<<" ";
    }
};
 
int main()
{
    vector<int> vec;
    for(int i=1; i<11; i++)
        vec.push_back(i);
        for_each(vec.begin(),vec.end(),IsEvan());
    return 0;
}
Вопрос 2.
Пытаюсь применить стандартный отрицатель unary_negate. Не знаю, как правильно его вызвать.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class predicate: public unary_function<int,bool>
{
public:
    bool operator()(int num) const
    {
        return num<=5;
    }
};
 
int main()
{
    vector<int> vec;
    for(int i=1; i<11; i++)
        vec.push_back(i);
    cout<<*find_if(vec.begin(),vec.end(),unary_negate<predicate()>()); // Не знаю, как правильно написать эту строку
    return 0;
}
Зачем нужны отрицатели unary_negate, если есть стандартные функции not1 и not2 ?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.01.2011, 00:54
Ответы с готовыми решениями:

Пара вопросов по С++
возникло несколько вопросов, с которыми что то не могу никак разобраться 1. Как происходит выравнивание при создании структуры? ...

Пара вопросов по C++ 11
1. чем отличаются std::forward_list и std::initializer_list? 2. не получается применять constexpr в msvs 2013 pro constexpr auto n = 0;...

пара вопросов по GUI
1) итак, посмотрел Inter PRO одного банка. При наборе в IE адреса он каким-то образом переадресует запущенному Inter PRO, он в свою очередь...

12
Freelance
Эксперт С++
 Аватар для asics
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
21.01.2011, 01:03
Цитата Сообщение от Leningradec Посмотреть сообщение
Разве не логичней сначала создать объект класса IsEvan и именно его использовать в алгоритме?
Раз уже зашла речь о том "что будет логичней", то делай так
C++
1
2
3
4
5
6
7
8
int main()
{
        vector<int> vec;
        for(int i=1; i<11; i++)
                vec.push_back(i);
        for_each(vec.begin(),vec.end(),[](int a) {if( !(a % 2) ) std::cout << a << ' ';});
        return 0;
}
это по стандарту C++0x.
1
0 / 0 / 0
Регистрация: 21.11.2010
Сообщений: 30
21.01.2011, 01:11  [ТС]
Цитата Сообщение от asics Посмотреть сообщение
Раз уже зашла речь о том "что будет логичней", то
Перефразирую вопрос: почему в этом коде используется функтор без создания объекта класса IsEvan?
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
21.01.2011, 01:15
1.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <vector>
#include <algorithm>
 
class IsEvan
{
public:
        void operator()(int num)
        {
                if(num%2==0)
                        std::cout<<num<<" ";
        }
};
 
int main()
{
        std::vector<int> vec;
        for(int i=1; i<11; i++)
                vec.push_back(i);
        IsEvan ise;
        for_each(vec.begin(),vec.end(),ise);
        return 0;
}
http://liveworkspace.org/code/... 91740c5f4b
1
0 / 0 / 0
Регистрация: 21.11.2010
Сообщений: 30
21.01.2011, 01:24  [ТС]
niXman, я знаю, что можно создать объект и использовать его. Вопрос в другом - почему можно использовать функтор вот так: IsEvan()? Без создания объекта?
0
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
21.01.2011, 01:25
Leningradec, IsEven() — и есть создание нового объекта, т.к. это вызов конструктора.
1
0 / 0 / 0
Регистрация: 21.11.2010
Сообщений: 30
21.01.2011, 01:31  [ТС]
volovzi, блин, точно! что-то я ступил ((
а по второму вопросу есть мнения???
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
21.01.2011, 01:39
а я сижу, гляжу в написанное, и пытаюсь понять, о чем это ТС...
0
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
21.01.2011, 01:40
Leningradec, а что ты хочешь сделать? Сменить знак всех элементов массива?
0
0 / 0 / 0
Регистрация: 21.11.2010
Сообщений: 30
21.01.2011, 01:47  [ТС]
volovzi, да я просто хочу разобраться, как использовать стандартные отрицатели. без привязки к какой-либо задаче
0
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
21.01.2011, 01:57
Leningradec, все функторы используются одинаково. А именно, в алгоритм подставляется экземпляр этого класса.
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
21.01.2011, 02:11
1)
Временный объект, создаваемый явным вызовом конструктора здесь удобнее, так как объект функтора здесь передается в алгоритм по значению, и после копирования больше не нужен.
2)
Функторы std::unary_negate и std::binary_negate удобнее использовать не напрямую, а используя функции std::not1 и std::not2 создающие объекты этих функторов.
0
0 / 0 / 0
Регистрация: 21.11.2010
Сообщений: 30
21.01.2011, 02:18  [ТС]
volovzi, в итоге сделал вот так и все заработало:
C++
1
cout<<*find_if(vec.begin(),vec.end(),unary_negate<predicate>(predicate()));
Спасибо за помощь!

Добавлено через 2 минуты
Mr.X, спасибо! я разобрался!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.01.2011, 02:18
Помогаю со студенческими работами здесь

Пара вопросов по итераторам
1. Почему в этом коде элементы удаляются через одного? for (std::vector &lt;int&gt;::iterator j = vector.begin(); j &lt; vector.end(); j++) ...

Пара глупых вопросов
Помогите please,please,please. Не могу понять в чем туплю, надо всего-то записать двумерный массив в файл ну и я пишу (Уже есть массив...

вставление строк и пара вопросов
вычислить и вывести на экран в виде таблицы значение функции F на интервале от Xнач до Xконч с шагом Dx задана система: ...

Пара вопросов о рандомайзере и RadioButton
1) srand((unsigned)time(NULL)); int rand_ = rand()%10; rand_ будет равен от 0 до 9 включительно или от 0 до 10 включительно? ...

Пара вопросов про массивы
у меня есть пара вопросов,хотя один можно сказать относится к функциям..но тема у нас в курсе-массивы. Так вот: 1.void main() { const...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru