-
Opération sur des vector
Salut à tous,
actuellement j'ai besoin de multiplier le contenu de deux std::vector<int>.
Pour ce faire j'utilise l'algo le plus simple qu'il soit : la multiplication comme on la voit en primaire.
J'ai donc deux boucles for, dans la première je crée un copie temporaire de l'objet à multiplier et dans la seconde je le multiplie à l'autre vector (en gardant les retenus bien sur), une fois fait je sort de la deuxiéme boucle for, et là je rajoute des zéros en fonction de la valeur du i de ma première boucle.
Puis j'ajoute le temporaire dans le un nouveau vector.
Seulement sur des vectors assez lourd et / ou des grosses quantités de multiplication ma méthode naïve devient vite lente, trop lente.
Donc ma question est : y'aurait-il un autre algo (je cherche juste à ce qu'on m'oriente un peu pas tout l'algo pondu) qui serait plus rapide.
(on pourrait le généraliser à la multiplication de tableau d'entier en fait.)
Peut être aussi utilisé un autre conteneur? valarray est-il est une bonne idée? (il est difficile de trouver une doc un peu poussé sur ce conteneur...)
-
Salut,
J'avoue avoir un peu lu en diagonal, mais est-ce que std::inner_product ou une combinaison de std::for_each et std::accumulate ne pourraient pas te convenir ?
A moins que ce ne soit pour un exercice, il existe aussi des librairies pour gérer les vecteurs et les matrices (notamment boost.uBLAS )
-
En fait le vector est encapsulé dans une class. for_each ne me servira pas ici.
Je regarde du côté de inner_product().
Pour accumulate : non car il me permettrait pas de gérer les retenus. Parce que bon... j'ai peut être oublié de préciser que chaque entier ne doit pas dépasser 9.
En fait ouaip c'est bien pour un projet / exercices, je code une class permettant de gérer des entiers de longueur limité à la taille de la mémoire. Je sais bien que gmp permet de le faire :).