web-dev-qa-db-fra.com

Multipliez les éléments vectoriels par une valeur scalaire à l'aide de STL

Salut, je veux (multiplier, ajouter, etc.) un vecteur par une valeur scalaire, par exemple myv1 * 3, Je sais que je peux faire une fonction avec un forloop, mais est-il possible de le faire en utilisant la fonction STL? Quelque chose comme la {fonction Algorithm.h :: transform}?

34
Ismail Marmoush

Oui, en utilisant std::transform:

std::transform(myv1.begin(), myv1.end(), myv1.begin(),
               std::bind(std::multiplies<T>(), std::placeholders::_1, 3));

Avant C++ 17, vous pouviez utiliser std::bind1st(), qui était obsolète en C++ 11.

std::transform(myv1.begin(), myv1.end(), myv1.begin(),
               std::bind1st(std::multiplies<T>(), 3));

Pour les espaces réservés;

#include <functional> 
82

Si vous pouvez utiliser un valarray au lieu d'un vector, il a des opérateurs intégrés pour effectuer une multiplication scalaire.

v *= 3;

Si vous devez utiliser un vector, vous pouvez en effet utiliser transform pour faire le travail:

transform(v.begin(), v.end(), v.begin(), _1 * 3);

(en supposant que vous avez quelque chose de similaire à Boost.Lambda qui vous permet de créer facilement des objets fonction anonymes comme _1 * 3 :-P)

23

Solution C++ moderne pour votre question.

std::vector<double> myarray;
double myconstant{3.3};
std::transform(myarray.begin(), myarray.end(), myarray.begin(), [myconstant](auto& c){return c*myconstant;});
6
Spandy