Mesures – Test 1.3

#include <algorithm>
#include <vector>
#include <list>
#include <deque>
#include <iostream>
#include <chrono>
#include <random>
#include <memory>
using namespace std;
using namespace std::chrono;
struct Sommation
{
   long valeur;
   Sommation(long init)
      : valeur{init}
   {
   }
   void operator()(int n) noexcept
      { valeur += n; }
};
template <class Itt>
   system_clock::duration somme_elements(Itt debut, Itt fin, long &somme)
   {
      auto avant = system_clock::now();
      somme = for_each(debut, fin, Sommation(long{})).valeur;
      return system_clock::now() - avant;
   }
int main()
{
   const int N = 10000000;
   unique_ptr<int[]> tab (new int[N]);
   random_device rd;
   mt19937 rng(rd());
   uniform_int_distribution<int> distrib(1, 10);
   generate(&tab[0], &tab[N], [&](){ return distrib(rng); });
   long somme;
   auto t_t = somme_elements(&tab[0], &tab[N], somme);
   vector<int> v(&tab[0], &tab[N]);
   list<int> lst(&tab[0], &tab[N]);
   deque<int> d(&tab[0], &tab[N]);
   auto t_v = somme_elements(begin(v), end(v), somme);
   auto t_lst = somme_elements(begin(lst), end(lst), somme);
   auto t_d = somme_elements(begin(d), end(d), somme);
   cout << "Resultats pour la somme de " << N << " elements (ms):" << endl
        << "\ttableau: " << duration_cast<milliseconds>(t_t).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: 2 ms.
        vector: 3 ms.
        list: 20 ms.
        deque: 13 ms.
Appuyez sur une touche pour continuer...

Valid XHTML 1.0 Transitional

CSS Valide !