Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
Ilot
Эксперт С++
1826 / 1184 / 342
Регистрация: 16.05.2013
Сообщений: 3,119
Записей в блоге: 5
Завершенные тесты: 1
#1

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

29.01.2014, 11:08. Просмотров 1371. Ответов 37
Метки нет (Все метки)

Собственно назрел такой вопрос:
Как в бинарном предикате или функторе к одной из переменных применить некоторый функциональный объект?
Например, у нас имеется два массив. Требуется найти сумму их соответствующих элементов причем если некий элемент второго массива нечетный его следует удвоить.
Очевидно будем пользоваться алгоритмом transform. Предикат пусть будет plus. Вот теперь вопрос как его записать в данном случае?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.01.2014, 11:08
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как в бинарном предикате или функторе к одной из переменных применить некоторый функциональный объект? (C++):

Недопустимый неполный тип , или как передать в функцию указатель на объект класса , или просто объект
Други мои , кодеры. Не могу я ни как передать в функцию объект класса , или что...

Как применить рисунок (или другой объект) ко всем слайдам
То есть не фоновый рисунок, а просто рисунок. Нужно сделать так, чтобы он в...

Как записать объект(или хотя бы его поля ) в файл в бинарном виде и считать оттуда?
В txt файлик коллекцию обьектов записать необходимо, и считать потом оттуда.

Как можно в textarea применить ::first-line, или как к первой строки применить стиль, внутри данного элемента
Да и вообще, для этого можно ли еще что-либо вложить в данный элемент, кроме...

Найти некоторый объект на изображении
Мне требуется написать подобную программу на Python, но я очень слабо...

Как записать объект с полем типа std::string в бинарном виде в файл и считать его обратно?
Знаю как записывать объекты в файл в бинарном виде, но как быть, когда у них...

37
Avazart
Эксперт С++
7685 / 5594 / 543
Регистрация: 10.12.2010
Сообщений: 25,074
Записей в блоге: 17
30.01.2014, 15:03 #21
Цитата Сообщение от Ilot Посмотреть сообщение
Jupiter, Tulosba
Свой функтор писать нельзя. Только с использованием стандартных бинарных функторов/предикатов.
Вы пожайлуста поймите, что я знаю как реализовать подобные вещи с помощью своего функтора. Вопрос в том как это реализовать для бинарных функторов из библиотеки STL.
Ну это идиотизм... у Вас что там секта поклонников STL ? STL не язык это инструмент.
Есть алгоритмы описывающие обобщенные случая и есть функтуры которые их уточняют, то есть описывают конкретный твой случай. Конкретный случай конечно реализовывать нужно именно тебе. Иначе в библиотеке было бы 1000 и 1 функтур.

Цитата Сообщение от Ilot Посмотреть сообщение
Хех... так и было... Но это же хорошо, что я изучаю исходники, а не только книжки читаю. В книгах очень много чего нет......
Как раз что так делать не надо, есть в книгах.
Читайте книги из раздела для начинающих из категории "level-up" (Дьюхерста,Саттера,Майерса).
1
DiffEreD
1442 / 779 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
30.01.2014, 15:16 #22
Лучший ответ Сообщение было отмечено Ilot как решение

Решение

Может проще будет через 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;
}
1
Ilot
Эксперт С++
1826 / 1184 / 342
Регистрация: 16.05.2013
Сообщений: 3,119
Записей в блоге: 5
Завершенные тесты: 1
30.01.2014, 15:25  [ТС] #23
DiffEreD, вроде бы оно однако похоже прграмка работает не совсем правильно http://ideone.com/33jgCI
Должна быть последовательность 3 4 9 8 15 12 21 16 27
0
Tulosba
:)
Эксперт С++
4746 / 3240 / 496
Регистрация: 19.02.2013
Сообщений: 9,046
30.01.2014, 15:27 #24
Цитата Сообщение от Ilot Посмотреть сообщение
вроде бы оно однако
так тут нет проверки на нечетность потому что.
0
DiffEreD
1442 / 779 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
30.01.2014, 15:28 #25
С четностью еще не придумал как сделать.
0
Ilot
Эксперт С++
1826 / 1184 / 342
Регистрация: 16.05.2013
Сообщений: 3,119
Записей в блоге: 5
Завершенные тесты: 1
30.01.2014, 15:35  [ТС] #26
Цитата Сообщение от DiffEreD Посмотреть сообщение
С четностью еще не придумал как сделать.
Это не важно. Ответ на вопрос получен.
0
gray_fox
What a waste!
1552 / 1257 / 165
Регистрация: 21.04.2012
Сообщений: 2,634
Завершенные тесты: 3
30.01.2014, 15:38 #27
Лучший ответ Сообщение было отмечено Ilot как решение

Решение

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))))

Не по теме:

адъ :)

1
Ilot
Эксперт С++
1826 / 1184 / 342
Регистрация: 16.05.2013
Сообщений: 3,119
Записей в блоге: 5
Завершенные тесты: 1
30.01.2014, 15:47  [ТС] #28
Вроде как понятно, что пора учить новый стандарт...
0
DiffEreD
1442 / 779 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
30.01.2014, 15:53 #29
gray_fox, у меня такая конструкция не компилируется (g++ 4.8.2).
0
gray_fox
What a waste!
1552 / 1257 / 165
Регистрация: 21.04.2012
Сообщений: 2,634
Завершенные тесты: 3
30.01.2014, 15:56 #30
DiffEreD, ну я не проверял, но конструкция должна получиться такая:
C++
1
_1 + _2 * (1 + _2 % 2)
0
Avazart
Эксперт С++
7685 / 5594 / 543
Регистрация: 10.12.2010
Сообщений: 25,074
Записей в блоге: 17
30.01.2014, 16:16 #31
Цитата Сообщение от gray_fox Посмотреть сообщение
адъ
Цитата Сообщение от Ilot Посмотреть сообщение
Вроде как понятно, что пора учить новый стандарт...
При чем ту стандарт к котлу и чертям ?

Нафига городить бинды, если можно нагородить лямбды?
0
Ilot
Эксперт С++
1826 / 1184 / 342
Регистрация: 16.05.2013
Сообщений: 3,119
Записей в блоге: 5
Завершенные тесты: 1
30.01.2014, 16:28  [ТС] #32
Цитата Сообщение от Avazart Посмотреть сообщение
Нафига городить бинды, если можно нагородить лямбды?
Притом, что нужно читать о чем спрашивает автор темы. Со всем уважением, но вы этого как мне кажется не поняли. Я не хочу сказать, что конструкция с биндами будет лучше чем написать свой функтор. Однако это полный ответ на вопрос который я задал.
Цитата Сообщение от Avazart Посмотреть сообщение
При чем тут стандарт к котлу и чертям ?
Старый стандар не поддерживает ни bind ни placeholders.
0
Avazart
Эксперт С++
7685 / 5594 / 543
Регистрация: 10.12.2010
Сообщений: 25,074
Записей в блоге: 17
30.01.2014, 16:38 #33
Цитата Сообщение от Ilot Посмотреть сообщение
Старый стандар не поддерживает ни bind ни placeholders.
Цитата Сообщение от Ilot Посмотреть сообщение
Притом, что нужно читать о чем спрашивает автор темы. Со всем уважением, но вы этого как мне кажется не поняли. Я не хочу сказать, что конструкция с биндами будет лучше чем написать свой функтор. Однако это полный ответ на вопрос который я задал.
Так вы задаете странные вопросы, получаете соответствующие ответы.

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

Цитата Сообщение от Ilot Посмотреть сообщение
Старый стандар не поддерживает ни bind ни placeholders.
Есть в Boost.
0
Ilot
Эксперт С++
1826 / 1184 / 342
Регистрация: 16.05.2013
Сообщений: 3,119
Записей в блоге: 5
Завершенные тесты: 1
30.01.2014, 16:45  [ТС] #34
Цитата Сообщение от Avazart Посмотреть сообщение
Чем не угодили свои функтуры не понятно.
Есть такая вещь как любопытство. Мне стало интересно возможно ли то о чем я спросил или нет.
Цитата Сообщение от Avazart Посмотреть сообщение
Так вы задаете странные вопросы, получаете соответствующие ответы.
Нет. Просто бывает так, что человека стразу понять не всегда получается особенно когда он задает "странные вопросы". Просто вы и Jupiter не поняли вопроса, а другие люди поняли и оставим эту тему.
0
MrGluck
Модератор
Эксперт CЭксперт С++
8022 / 4865 / 1425
Регистрация: 29.11.2010
Сообщений: 13,251
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));
};
же

0
Tulosba
:)
Эксперт С++
4746 / 3240 / 496
Регистрация: 19.02.2013
Сообщений: 9,046
30.01.2014, 21:34 #36
MrGluck, ну захотелось товарищу поиграть комбинацией стандартных функторов. Что уж тут поделать.
0
MrGluck
Модератор
Эксперт CЭксперт С++
8022 / 4865 / 1425
Регистрация: 29.11.2010
Сообщений: 13,251
30.01.2014, 21:41 #37
Оказывается и функторы нельзя и буст нельзя и С++11 нельзя...
Что ж тогда можно то?
Не могу не написать: KISS

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

Добавлено через 2 минуты
Написал бы только об этом сразу...
0
Avazart
Эксперт С++
7685 / 5594 / 543
Регистрация: 10.12.2010
Сообщений: 25,074
Записей в блоге: 17
30.01.2014, 22:08 #38
Цитата Сообщение от MrGluck Посмотреть сообщение
Что ж тогда можно то?
Только "Ад"..
0
30.01.2014, 22:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.01.2014, 22:08
Привет! Вот еще темы с решениями:

Как применить стиль только к одной странице?
Суть такая: 1) создал копию страницы page.php 2) Переименовал в my-page.php...

Функциональный объект и подсчёт определённых значений в векторе
Необходимо реализовать подсчёт количества элементов вектора, больших некоторого...

Что лучше передавать из функции в функцию — массив переменных или переменные по одной?
Что лучше передавать из функции в функцию - массив переменных или переменные по...

В некоторый момент программы нужно узнать, к какому классу принадлежит объект
В некоторый момент программы мне нужно узнать, к какому классу принадлежит...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru