Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Mikhail1990
19 / 19 / 4
Регистрация: 22.03.2014
Сообщений: 222
#1

Реализовать сложение векторов посредством transform - C++

04.08.2015, 18:42. Просмотров 451. Ответов 11
Метки нет (Все метки)

Товарищи, читаю Прату, дошел до STL (это ппц), есть задача реализовать вот этот кусок
C++
1
vad3 = 10.0* ((vad1 + vad2) / 2.0 + vad1 * cos(vad2));
таким способом
C++
1
transform(ved3.begin(), ved3.end(), ved3.begin(), bind1st(multiplies<double>(), 2.5));
тоесть средствами STL.
Вот исходное условие
C++
1
2
3
vector<double> ved1(10), ved2(10), ved3(10);
array<double, 10> vod1, vod2, vod3;
valarray<double> vad1(10), vad2(10), vad3(10);
до чего сам дошел
C++
1
transform(ved1.begin(), ved1.end(), ved2.begin(), ved3.begin(), bind1st(multiplies<double>(), 10));
Пожалуйста прокачайте мою тачку!
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.08.2015, 18:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Реализовать сложение векторов посредством transform (C++):

Сложение векторов - C++
Не понимаю почему методом insert не хочет принимать такие параметры. Даже если пытают переменной типа int присвоить vec, выдает ошибку (int...

Сложение векторов - C++
Здрасти. #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;cmath&gt; class vector3D{ public: vector3D(int inita=0,...

CUDA C/C++ сложение векторов - C++
вроде все так делаю, но не запускается не могу понять ошибку делаю с шаблона там просто надо заполнить недастоющие строчки вот шаблон ...

Сложение векторов строк - C++
Имеются два вектора строк std::vector &lt;std::string&gt; *str1; std::vector &lt;std::string&gt; *str2; Как их сложить чтоб в итоге...

Сложение векторов в результирующий - C++
кто может решите пожалуйста одну задачку: Даны матрица порядка n, а также векторы X и Y с элемнтами каждый. Найти вектор C=A*(X+Y)

Сложение векторов (MPI) - C++
Суть такая. Есть массив a и b c. Корды первого вектора это a a т.е. x1 y1 Корды второго вектора b b т.е. x2 y2 Нужно что бы в c...

11
Radugaga
6 / 6 / 0
Регистрация: 03.08.2015
Сообщений: 25
04.08.2015, 21:46 #2
Цитата Сообщение от Mikhail1990 Посмотреть сообщение
Пожалуйста прокачайте мою тачку!
На какой тачке катаешься и какой компилятор установлен под капотом?
0
Ilot
Модератор
Эксперт С++
1823 / 1181 / 232
Регистрация: 16.05.2013
Сообщений: 3,118
Записей в блоге: 5
Завершенные тесты: 1
05.08.2015, 08:04 #3
В данном случае проще написать свой функтор. Что то похожее на это:
C++
1
2
3
4
5
6
7
8
9
template <typename Res>
class functor {
public:
    template <typename Iter1, rypename Iter2>
    Res operator()(Iter1 iter1, Iter2 iter2) const {
        Res res = 10.0* ((*iter1 + *iter2) / 2.0 + *iter1 * cos(*iter2));
        return res;
    }
};
1
Mikhail1990
19 / 19 / 4
Регистрация: 22.03.2014
Сообщений: 222
05.08.2015, 09:35  [ТС] #4
Ilot, а такое реально реализовать без функторов и без лямбд используя только transform фцию? писал на буржуйских сайтах там сказали что так сделать нельзя.
Radugaga, lol
0
Ilot
Модератор
Эксперт С++
1823 / 1181 / 232
Регистрация: 16.05.2013
Сообщений: 3,118
Записей в блоге: 5
Завершенные тесты: 1
05.08.2015, 10:10 #5
Mikhail1990, был у меня не столь давно подобный вопрос.
Не в даваясь в подробности ответ был следующий можно, но только если использовать bind из стандартной библиотеки С++11.
Подобных диназавров на С++98 лучше даже не пытаться делать, ибо даже если у вас это получиться код будет не читаемым.
1
Mikhail1990
19 / 19 / 4
Регистрация: 22.03.2014
Сообщений: 222
05.08.2015, 10:13  [ТС] #6
Ilot, хорошо, спасибо за наводку!
0
S_el
2112 / 1632 / 308
Регистрация: 15.12.2013
Сообщений: 6,572
05.08.2015, 10:25 #7
Mikhail1990, без C++11 вы не сможете использовать std::array<>.
0
Mikhail1990
19 / 19 / 4
Регистрация: 22.03.2014
Сообщений: 222
05.08.2015, 10:29  [ТС] #8
S_el, хорошо, а как реализовать остальное
C++
1
transform(ved1.begin(), ved1.end(), ved2.begin(), ved3.begin(), bind1st(multiplies<double>(), 10));
сложиь мне понятно как, а как остальные действия реализовывать в этой функции?
0
S_el
2112 / 1632 / 308
Регистрация: 15.12.2013
Сообщений: 6,572
05.08.2015, 10:32 #9
Mikhail1990, вы до сих не ответили на вопрос,какие есть ограничения на реализацию. Без лямбд и функторов,что еще нельзя?
0
Mikhail1990
19 / 19 / 4
Регистрация: 22.03.2014
Сообщений: 222
05.08.2015, 10:36  [ТС] #10
S_el, использовать только те средства которые есть в первом посте, кроме этого
C++
1
 vad3 = 10.0* ((vad1 + vad2) / 2.0 + vad1 * cos(vad2));
. И надо сделать
C++
1
transform(ved3.begin(), ved3.end(), ved3.begin(), bind1st(multiplies<double>(), 2.5));
такое.
0
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
05.08.2015, 11:17 #11
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
За несколько вызовов можно наколупать:
C++
1
2
3
4
5
6
    std::transform( ved1.begin(), ved1.end(), ved2.begin(), ved3.begin(), std::plus<double>() ) ;
    std::transform( ved3.begin(), ved3.end(), ved3.begin(), std::bind2nd ( std::divides<double>() , 2.0 ) ) ;
    std::transform( ved2.begin(), ved2.end(), ved2.begin(), std::ptr_fun<double,double> ( std::cos ) ) ;
    std::transform( ved2.begin(), ved2.end(), ved1.begin(), ved2.begin(), std::multiplies<double>() ) ;
    std::transform( ved2.begin(), ved2.end(), ved3.begin(), ved3.begin(), std::plus<double>() ) ;
    std::transform( ved3.begin(), ved3.end(), ved3.begin(), std::bind2nd ( std::multiplies<double>() , 10.0 ) ) ;
1
Mikhail1990
19 / 19 / 4
Регистрация: 22.03.2014
Сообщений: 222
05.08.2015, 11:37  [ТС] #12
Croessmah, и без лишних слов!
0
05.08.2015, 11:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.08.2015, 11:37
Привет! Вот еще темы с ответами:

Сложение векторов в структуре - C++
Надо сложить 2 вектора использую функции структуры. Пока дошел до этого варианта: #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include...

Последовательное и параллельное сложение векторов - C++
Помогите,пожалуйста, написать программу для последовательного и параллельного сложение векторов.

Сложение элементов двух векторов с записью в третий - C++
Есть код функции (не дописанная), которая получает в качестве аргументов 2 вектора произвольных типов: template&lt;class T&gt; T&amp;...

Сложение двух векторов и запись результата в третий вектор - C++
Программа заполняет 2 вектора типа float значениями. После чего вектора складываются и результат сложения записывается в третий вектор. Вот...


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

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

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