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

Как в бинарном предикате или функторе к одной из переменных применить некоторый функциональный объект? - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
29.01.2014, 11:08     Как в бинарном предикате или функторе к одной из переменных применить некоторый функциональный объект? #1
Собственно назрел такой вопрос:
Как в бинарном предикате или функторе к одной из переменных применить некоторый функциональный объект?
Например, у нас имеется два массив. Требуется найти сумму их соответствующих элементов причем если некий элемент второго массива нечетный его следует удвоить.
Очевидно будем пользоваться алгоритмом transform. Предикат пусть будет plus. Вот теперь вопрос как его записать в данном случае?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.01.2014, 11:08     Как в бинарном предикате или функторе к одной из переменных применить некоторый функциональный объект?
Посмотрите здесь:

при вызове конструктора присваивания надо возвращать ссыль на объект или сам объект. Смысл? Значения нужных полей меняютмся и без этого! C++
Объект osteram& или как его вывести в переменную ? C++
C++ Массив и классы (как передаётся объект: по значению или по ссылке?)
Как задать переменную в бинарном формате? (В шестнадцатиричном через Х, а бинарном?) C++
C++ Как записать объект с полем типа std::string в бинарном виде в файл и считать его обратно?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Avazart
 Аватар для Avazart
6900 / 5140 / 252
Регистрация: 10.12.2010
Сообщений: 22,587
Записей в блоге: 17
30.01.2014, 15:03     Как в бинарном предикате или функторе к одной из переменных применить некоторый функциональный объект? #21
Цитата Сообщение от Ilot Посмотреть сообщение
Jupiter, Tulosba
Свой функтор писать нельзя. Только с использованием стандартных бинарных функторов/предикатов.
Вы пожайлуста поймите, что я знаю как реализовать подобные вещи с помощью своего функтора. Вопрос в том как это реализовать для бинарных функторов из библиотеки STL.
Ну это идиотизм... у Вас что там секта поклонников STL ? STL не язык это инструмент.
Есть алгоритмы описывающие обобщенные случая и есть функтуры которые их уточняют, то есть описывают конкретный твой случай. Конкретный случай конечно реализовывать нужно именно тебе. Иначе в библиотеке было бы 1000 и 1 функтур.

Цитата Сообщение от Ilot Посмотреть сообщение
Хех... так и было... Но это же хорошо, что я изучаю исходники, а не только книжки читаю. В книгах очень много чего нет......
Как раз что так делать не надо, есть в книгах.
Читайте книги из раздела для начинающих из категории "level-up" (Дьюхерста,Саттера,Майерса).
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
30.01.2014, 15:16     Как в бинарном предикате или функторе к одной из переменных применить некоторый функциональный объект? #22
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Может проще будет через bind:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int main() {
 
    std::vector<int> v1 = {1,2,3,4};
    std::vector<int> v2 = {5,6,7,8};
 
    std::transform(v1.begin(), v1.end(), v2.begin(),
                   std::ostream_iterator<int>(std::cout, " "),
                   std::bind(std::plus<int>(),
                   std::placeholders::_1,
                   std::bind(std::multiplies<int>(), 2, std::placeholders::_2))
                   );
 
    return 0;
}
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
30.01.2014, 15:25  [ТС]     Как в бинарном предикате или функторе к одной из переменных применить некоторый функциональный объект? #23
DiffEreD, вроде бы оно однако похоже прграмка работает не совсем правильно http://ideone.com/33jgCI
Должна быть последовательность 3 4 9 8 15 12 21 16 27
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
30.01.2014, 15:27     Как в бинарном предикате или функторе к одной из переменных применить некоторый функциональный объект? #24
Цитата Сообщение от Ilot Посмотреть сообщение
вроде бы оно однако
так тут нет проверки на нечетность потому что.
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
30.01.2014, 15:28     Как в бинарном предикате или функторе к одной из переменных применить некоторый функциональный объект? #25
С четностью еще не придумал как сделать.
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
30.01.2014, 15:35  [ТС]     Как в бинарном предикате или функторе к одной из переменных применить некоторый функциональный объект? #26
Цитата Сообщение от DiffEreD Посмотреть сообщение
С четностью еще не придумал как сделать.
Это не важно. Ответ на вопрос получен.
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
30.01.2014, 15:38     Как в бинарном предикате или функторе к одной из переменных применить некоторый функциональный объект? #27
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Ilot, наверное нужно больше биндов!
C++
1
2
3
4
5
6
7
8
9
10
std::bind(
      std::plus<int>()
   ,  std::placeholders::_1
   ,  std::bind(
            std::multiplies<int>()
          , std::placeholders::_2
          , std::bind(
                  std::plus<int>()
                , 1
                , std::bind(std::modulus<int>(), std::placeholders::_2, 2))))

Не по теме:

адъ

Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
30.01.2014, 15:47  [ТС]     Как в бинарном предикате или функторе к одной из переменных применить некоторый функциональный объект? #28
Вроде как понятно, что пора учить новый стандарт...
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
30.01.2014, 15:53     Как в бинарном предикате или функторе к одной из переменных применить некоторый функциональный объект? #29
gray_fox, у меня такая конструкция не компилируется (g++ 4.8.2).
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
30.01.2014, 15:56     Как в бинарном предикате или функторе к одной из переменных применить некоторый функциональный объект? #30
DiffEreD, ну я не проверял, но конструкция должна получиться такая:
C++
1
_1 + _2 * (1 + _2 % 2)
Avazart
 Аватар для Avazart
6900 / 5140 / 252
Регистрация: 10.12.2010
Сообщений: 22,587
Записей в блоге: 17
30.01.2014, 16:16     Как в бинарном предикате или функторе к одной из переменных применить некоторый функциональный объект? #31
Цитата Сообщение от gray_fox Посмотреть сообщение
адъ
Цитата Сообщение от Ilot Посмотреть сообщение
Вроде как понятно, что пора учить новый стандарт...
При чем ту стандарт к котлу и чертям ?

Нафига городить бинды, если можно нагородить лямбды?
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
30.01.2014, 16:28  [ТС]     Как в бинарном предикате или функторе к одной из переменных применить некоторый функциональный объект? #32
Цитата Сообщение от Avazart Посмотреть сообщение
Нафига городить бинды, если можно нагородить лямбды?
Притом, что нужно читать о чем спрашивает автор темы. Со всем уважением, но вы этого как мне кажется не поняли. Я не хочу сказать, что конструкция с биндами будет лучше чем написать свой функтор. Однако это полный ответ на вопрос который я задал.
Цитата Сообщение от Avazart Посмотреть сообщение
При чем тут стандарт к котлу и чертям ?
Старый стандар не поддерживает ни bind ни placeholders.
Avazart
 Аватар для Avazart
6900 / 5140 / 252
Регистрация: 10.12.2010
Сообщений: 22,587
Записей в блоге: 17
30.01.2014, 16:38     Как в бинарном предикате или функторе к одной из переменных применить некоторый функциональный объект? #33
Цитата Сообщение от Ilot Посмотреть сообщение
Старый стандар не поддерживает ни bind ни placeholders.
Цитата Сообщение от Ilot Посмотреть сообщение
Притом, что нужно читать о чем спрашивает автор темы. Со всем уважением, но вы этого как мне кажется не поняли. Я не хочу сказать, что конструкция с биндами будет лучше чем написать свой функтор. Однако это полный ответ на вопрос который я задал.
Так вы задаете странные вопросы, получаете соответствующие ответы.

Чем не угодили свои функтуры не понятно.

Цитата Сообщение от Ilot Посмотреть сообщение
Старый стандар не поддерживает ни bind ни placeholders.
Есть в Boost.
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
30.01.2014, 16:45  [ТС]     Как в бинарном предикате или функторе к одной из переменных применить некоторый функциональный объект? #34
Цитата Сообщение от Avazart Посмотреть сообщение
Чем не угодили свои функтуры не понятно.
Есть такая вещь как любопытство. Мне стало интересно возможно ли то о чем я спросил или нет.
Цитата Сообщение от Avazart Посмотреть сообщение
Так вы задаете странные вопросы, получаете соответствующие ответы.
Нет. Просто бывает так, что человека стразу понять не всегда получается особенно когда он задает "странные вопросы". Просто вы и Jupiter не поняли вопроса, а другие люди поняли и оставим эту тему.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,410
30.01.2014, 21:30     Как в бинарном предикате или функторе к одной из переменных применить некоторый функциональный объект? #35
а чем вариант Jupiter не соответствует заявленной в шапке темы вопросу? Просто и лаконично. Или у нас -std=c++98 ?
Цитата Сообщение от Ilot Посмотреть сообщение
имеется два массив. Требуется найти сумму их соответствующих элементов причем если некий элемент второго массива нечетный его следует удвоить.

Не по теме:

Jupiter,

C++
1
2
3
4
auto pred = [](int a, int b)
{
    return a + b*(1 + (b & 1));
};
же

Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
30.01.2014, 21:34     Как в бинарном предикате или функторе к одной из переменных применить некоторый функциональный объект? #36
MrGluck, ну захотелось товарищу поиграть комбинацией стандартных функторов. Что уж тут поделать.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,410
30.01.2014, 21:41     Как в бинарном предикате или функторе к одной из переменных применить некоторый функциональный объект? #37
Оказывается и функторы нельзя и буст нельзя и С++11 нельзя...
Что ж тогда можно то?
Не могу не написать: KISS

Добавлено через 52 секунды
Tulosba, причем функторов строго из functional и строго из С++98.

Добавлено через 2 минуты
Написал бы только об этом сразу...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.01.2014, 22:08     Как в бинарном предикате или функторе к одной из переменных применить некоторый функциональный объект?
Еще ссылки по теме:

Может ли объект-член, или объект-элемент достучаться к содержащему его? C++
C++ В некоторый момент программы нужно узнать, к какому классу принадлежит объект
C++ SFML. Как засунуть в функцию объект класса? ИЛИ как делается наследование?

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

Или воспользуйтесь поиском по форуму:
Avazart
 Аватар для Avazart
6900 / 5140 / 252
Регистрация: 10.12.2010
Сообщений: 22,587
Записей в блоге: 17
30.01.2014, 22:08     Как в бинарном предикате или функторе к одной из переменных применить некоторый функциональный объект? #38
Цитата Сообщение от MrGluck Посмотреть сообщение
Что ж тогда можно то?
Только "Ад"..
Yandex
Объявления
30.01.2014, 22:08     Как в бинарном предикате или функторе к одной из переменных применить некоторый функциональный объект?
Ответ Создать тему
Опции темы

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