Bonjour,
j'implémente un algorithme de calcul et je voulais savoir si la class Vector du STL optimise le temps de calcul ou que je doit implémenter ma propre classe template Vector (plus allégée que celle du la STL) ?
Merci de m'éclairer,
++
Bonjour,
j'implémente un algorithme de calcul et je voulais savoir si la class Vector du STL optimise le temps de calcul ou que je doit implémenter ma propre classe template Vector (plus allégée que celle du la STL) ?
Merci de m'éclairer,
++
Il n'y a pas de classe Vector dans la STL.
Il y a vector, mais ça n'a rien à voir avec le calcul.
pour la performance des calculs, il est possible, mais très difficile de faire mieux que la lib <algorithm> de la STL (cf. ma signature) qui utilise les conteneurs de cette même STL (dont la classe vecteur fait partie).
Merci pour vos réponse,
Je vais creuser cela, et je vous tiens au courant.
++
Pour des calculs numériques, la classe std::valarray était initialement prévue pour ce genre de choses (en particulier par un aliasing réduit), mais par manque d'attention, et est assez peu populaire actuellement, et il n'est pas certain que l'implémentation livrée avec ton compilateur soit optimale.
std::vector est une classe générique, qui a de bonnes performances globales, mais qui n'est pas spécialisée pour du calcul numérique.
Il existe aussi de nombreuses bibliothèques dédiées au calcul numérique (MTL, Blitz++,...).
Il faudrait en savoir plus sur ce que tu souhaites faire pour pouvoir mieux te guider.
Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.
A noter que les compilateurs ne vont pas vraiment faire d'optimisation avec des std::vector...
Par exemple:
ne sera pas beaucoup optimisé...
Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 std::vector<float> vec1; std::vector<float> vec2; std::vector<float> vec3; std::vector<float> result; for (int i = 0; (i < length); ++i) result.push_back(vec1[i] * vec2[i] + vec3[i]);
alors que:
Va utiliser les instructions SSE....
Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 float[] vec1; float[] vec2; float[] vec3; float[] result; for (int i = 0; (i < length); ++i) result[i] = vec1[i] * vec2[i] + vec3[i];
Il va surtout pas compiler, ce code.
Et c'est normal que ce soit différent, push_back n'est pas la même chose que machin[i] =
Mon blog anglais - Mes articles et critiques de livres - FAQ C++0x, avec liste des nouveautés - Conseils sur le C++ - La meilleure FAQ du monde - Avant de créer des classes que vous réutiliserez, regardez si ça n'existe pas déjà - Le site du comité de normalisation du C++
Le guide pour bien débuter en C++ - Cours et tutoriels pour apprendre C++
Partager