Как использовать divides и for_each? - PullRequest
1 голос
/ 22 декабря 2019

У меня есть:

vector<double> ved1 = { 1,2,3,4,5,6,7,8,9,10 };
vector<double> ved2 = { 11,12,13,14,15,16,17,18,19,20 };
vector<double> ved3(10);

, и я хочу, чтобы ved3 = ved3 / 2, но я не могу получить его правильно, результат равен 2 / ved3;Как использовать деления?

transform(ved1.begin(), ved1.end(), ved2.begin(), ved3.begin(), plus<double>());
transform(ved3.begin(), ved3.end(), ved3.begin(), bind1st(divides<double>(),2));`    

Я хочу, потому что (ved2), но я не могу получить его. Что не так с моим кодом?

double cos_1(double x) { return cos(x); }
for_each(ved2.begin(), ved2.end(), cos_1);

Ответы [ 2 ]

2 голосов
/ 22 декабря 2019

bind1st свяжет 2 с 1-м аргументом divides, а затем transform предоставит каждый элемент от ved3 до divides в качестве второго аргумента. Таким образом, результат будет divides(2, ved3[0]), divides(2, ved3[1]) и т. Д.

Если вы хотите вместо этого вычислить divides(ved3[...], 2), используйте bind2nd(divides<double>(), 2). Таким образом, 2 будет связан со вторым аргументом, оставляя первый вакантным для transform.

1 голос
/ 22 декабря 2019

Как использовать std::for_each для поэлементного применения косинуса

std::for_each не заполняет какой-либо вывод;или обязательно измените входной контейнер / диапазон. Он просто применяет вызываемый объект к каждому элементу диапазона. Если у функции нет «побочных эффектов», то for_each будет бесполезен. В частности, в вашем случае - вы вычисляете косинус каждого значения, но ничего не делаете с ним.

Если вы хотите изменить значения на месте, вам нужно конкретно это сделать:

void apply_cos(double& x) { x = std::cos(x); }

// ...

for_each(ved2.begin(), ved2.end(), apply_cos);

или с использованием лямбда-выражения:

for_each(ved2.begin(), ved2.end(), [](double& x) { x = cos(x); });

Обратите внимание на использование эталонного входа для функции, а не значения :double& x, а не double x. Это означает, что при изменении x в apply_cos() значение в диапазоне ввода на std::for_each изменяется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...