Mesures – Test 1.0

#include <vector>
#include <list>
#include <deque>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <chrono>
#include <memory>
#include <random>
using namespace std;
using namespace std::chrono;
int main()
{
   clog.rdbuf(nullptr); // trou noir...
   const int NELEMS = 10000000;
   unique_ptr<int[]> tab(new int[NELEMS]);
   random_device rd;
   mt19937 rng(rd());
   uniform_int_distribution<int> distrib(1, 10);
   generate(&tab[0], &tab[NELEMS], [&](){ return distrib(rng); });
   vector<int> v(&tab[0], &tab[NELEMS]);
   list<int> lst(&tab[0], &tab[NELEMS]);
   deque<int> d(&tab[0], &tab[NELEMS]);
   system_clock::time_point avant;
   long somme;
   // Test sur le tableau (avec indices)
   somme = {};
   avant = system_clock::now();
   for (int i = 0; i < NELEMS; ++i) somme += tab[i];
   auto t_t0 = system_clock::now() - avant;
   clog << somme;
   // Test sur le tableau (avec indices)
   somme = {};
   avant = system_clock::now();
   for (auto p = &tab[0]; p != &tab[NELEMS]; ++p) somme += *p;
   auto t_t1 = system_clock::now() - avant;
   clog << somme;
   // Test sur un std::vector
   somme = {};
   avant = system_clock::now();
   for (int n : v) somme += n;
   auto t_v = system_clock::now() - avant;
   clog << somme;
   // Test sur une std::list
   somme = {};
   avant = system_clock::now();
   for (int n : lst) somme += n;
   auto t_lst = system_clock::now() - avant;
   clog << somme;
   // Test sur une std::deque
   somme = {};
   avant = system_clock::now();
   for (auto n : d) somme += n;
   auto t_d = system_clock::now() - avant;
   clog << somme;
   cout << "Resultats pour la somme de " << NELEMS << " elements (ms):" << endl
        << "\ttableau (indices): " << duration_cast<milliseconds>(t_t0).count() << " ms." <<  endl
        << "\ttableau (iterateurs): " << duration_cast<milliseconds>(t_t1).count() << " ms." <<  endl
        << "\tvector: " << duration_cast<milliseconds>(t_v).count() << " ms." <<  endl
        << "\tlist: " << duration_cast<milliseconds>(t_lst).count() << " ms." <<  endl
        << "\tdeque: " << duration_cast<milliseconds>(t_d).count() << " ms." <<  endl;
}

Sur mon petit ordinateur portatif, compilé avec Visual Studio 2013, configuration Release, et en prenant bien entendu soin d'ajouter _SECURE_SCL=0 aux options du préprocesseur pour désactiver les (franchement inutiles et nuisibles) Checked Iterators, j'obtiens :

Resultats pour la somme de 10000000 elements (ms):
        tableau (indices): 3 ms.
        tableau (iterateurs): 5 ms.
        vector: 6 ms.
        list: 21 ms.
        deque: 21 ms.
Appuyez sur une touche pour continuer...

Valid XHTML 1.0 Transitional

CSS Valide !