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}?
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>
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)
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;});