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,
++
AlloSchool, votre école sur internet.
Il n'y a pas de classe Vector dans la STL.
Il y a vector, mais ça n'a rien à voir avec le calcul.
Boost ftw
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).
« L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
Spinoza — Éthique III, Proposition VII
Merci pour vos réponse,
Je vais creuser cela, et je vous tiens au courant.
++
AlloSchool, votre école sur internet.
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];
N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
Et surtout
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] =
Boost ftw
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++
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager