Disons qu'il existe une liste d'entiers [1,2,3,4,5] et une fonction de carte qui multiplie chaque élément avec 10 et renvoie une liste modifiée comme [10,20,30,40,50 ans], avec modifier la liste d'origine. Comment cela peut être fait efficacement en C ++. P>
6 Réponses :
Voici un exemple:
Je ne pose que cela pour illustrer à l'aide d'un foncteur de transformation plutôt que d'une fonction globale:
#include <iostream> #include <algorithm> #include <vector> #include <functional> using namespace std; struct MulBy : public std::unary_function<int, int> { MulBy(int v) : v_(v) {} int operator()(int lhs) const { return lhs * v_; } private: int v_; }; int main() { vector<int> ListOfNumber; ListOfNumber.push_back(1); ListOfNumber.push_back(2); ListOfNumber.push_back(3); ListOfNumber.push_back(4); ListOfNumber.push_back(5); vector<int> ListResult; ListResult.resize(ListOfNumber.size()); //Produces a new list transform(ListOfNumber.begin(),ListOfNumber.end(),ListResult.begin(),MulBy(10)); copy(ListOfNumber.begin(),ListOfNumber.end(),ostream_iterator<int>(cout,"\t")); //Modifies the original list transform(ListOfNumber.begin(),ListOfNumber.end(),ListOfNumber.begin(),MulBy(10)); copy(ListResult.begin(),ListResult.end(),ostream_iterator<int>(cout,"\t")); cin.get(); }
Le long des lignes de @Darids répond, mais C ++ 03 (courant au moment de l'article original):
#include <vector> #include <algorithm> #include <functional> std::vector<int> src; std::vector<int> dst; std::transform(src.begin(), src.end(), std::back_inserter(dst), std::bind1st(std::multiplies<int>(), 10));
Merci pour cette réponse. Je suggère d'ajouter les directives nécessaires à la clarté.
Current C ++ serait d'utiliser une Lambda au lieu de BIND1ST.
@ SV90 à coup sûr, le temps et C ++ ont été déplacés depuis que j'ai posté cette réponse!
Ceci est ma mise en œuvre pour une méthode de carte Array, inspirée directement de JavaScript peut-être que cela sera utile pour quelqu'un d'autre, toujours, si
Désolé ... j'ai utilisé Transform et pour la recherche, je ne pouvais pas le rappeler pour le moment, je cherchais un quatrième paramètre dans la pensée de la pensée comme transformation :(