Performance de différents containers de la stl

Contenu du snippet

Programme montrant les différences de performances entre certains containers
de la stl
Les containers testés sont les suivants :
- std::vector
- std::list
- std::stack
- std::queue
Pour l'instant, seulement les fonctions suivantes sont testés :
- Ajout d'un élément en fin
- Suppression d'un élément en fin

Protocole de test :
- Appel de la fonction NB_ITERATION fois

Informations :
- NB_ITERATION doit être assez grand (dépend de la puissance de la machine)
pour que les valeurs soient significatives

Améliorations :
- Tester plus de containers et plus de fonctions

Source / Exemple :


/**

  • Programme montrant les différences de performances entre certains containers
  • de la stl
  • Les containers testés sont les suivants :
  • - std::vector
  • - std::list
  • - std::stack
  • - std::queue
  • Pour l'instant, seulement les fonctions suivantes sont testés :
  • - Ajout d'un élément en fin
  • - Suppression d'un élément en fin
*
  • Protocole de test :
  • - Appel de la fonction NB_ITERATION fois
*
  • Informations :
  • - NB_ITERATION doit être assez grand (dépend de la puissance de la machine)
  • pour que les valeurs soient significatives
  • Améliorations :
  • - Tester plus de containers et plus de fonctions
  • /
#include <vector> #include <list> #include <iostream> #include <queue> #include <time.h> #include <typeinfo> #include <stack> using namespace std; static clock_t start, finish; static double duration; static int NB_ITERATION = 0; /**
  • Appel de la fonction NB_ITERATION fois
  • /
double getFunctionDuration(void (*pt2Function)(void* pt2Object, int parameter), void * object) { start = clock(); for (int i = 0; i < NB_ITERATION; i++) (*pt2Function)(object, i); finish = clock(); return (double)(finish - start) / CLOCKS_PER_SEC; } template <class T> static void wrapper_for_push_back(void * container, int parameter) { T * casted_container = (T*) container; casted_container->push_back(parameter); } template <typename T> static void wrapper_for_push(void * container, int parameter) { T * casted_container = (T*) container; casted_container->push(parameter); } template <typename T> static void wrapper_for_pop_back(void * container, int parameter) { T * casted_container = (T*) container; casted_container->pop_back(); } template <typename T> static void wrapper_for_pop(void * container, int parameter) { T * casted_container = (T*) container; casted_container->pop(); } int main() { cout << " Iteration times = "; cin >> NB_ITERATION; std::vector<int> v; std::list<int> l; std::queue<int> q; std::stack<int> s; // Tests des insertions en fin cout << "push_back vector = " << getFunctionDuration(wrapper_for_push_back<std::vector<int>>, &v) << endl; cout << "push_back list = " << getFunctionDuration(wrapper_for_push_back<std::list<int>>, &l) << endl; cout << "push queue = " << getFunctionDuration(wrapper_for_push<std::queue<int>>, &q) << endl; cout << "push stack = " << getFunctionDuration(wrapper_for_push<std::stack<int>>, &s) << endl; // Tests des suppression en fin cout << "pop_back vector = " << getFunctionDuration(wrapper_for_pop_back<std::vector<int>>, &v) << endl; cout << "pop_back list = " << getFunctionDuration(wrapper_for_pop_back<std::list<int>>, &l) << endl; cout << "pop queue = " << getFunctionDuration(wrapper_for_pop<std::queue<int>>, &q) << endl; cout << "pop stack = " << getFunctionDuration(wrapper_for_pop<std::stack<int>>, &s) << endl; cin.get(); }

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.