Mesures – Test 2.0

#include <algorithm>
#include <vector>
#include <iostream>
#include <random>
#include <chrono>
using namespace std;
using namespace std::chrono;
namespace
{
   random_device rd;
   mt19937 gen(rd());
   uniform_int_distribution<int> distrib(0, 1);
}
class Entite
{
   bool actif;
public:
   Entite() noexcept
      : actif(distrib(gen)!=0)
   {
   }
   bool est_inactive() const noexcept
      { return !actif; }
};
template <class Itt>
   system_clock::duration compter_inactifs_manuel(Itt debut, Itt fin, int &inactifs)
   {
      inactifs = {};
      auto avant = system_clock::now();
      for (; debut != fin; ++debut)
         if (debut->est_inactive())
            ++inactifs;
      return system_clock::now() - avant;
   }
template <class Itt>
   system_clock::duration compter_inactifs_std(Itt debut, Itt fin, int &inactifs)
   {
      auto avant = system_clock::now();
      inactifs = count_if(debut, fin, [](const Entite &e) { return e.est_inactive(); });
      return system_clock::now() - avant;
   }
int main()
{
   const int N = 50000000;
   vector<Entite> v(N);
   int inactifs;
   auto t_man = compter_inactifs_manuel(begin(v), end(v), inactifs);
   cout << "Compatibilite manuelle, nb d'inactifs sur " << N << " elements: "
        << inactifs << "\n\ttemps requis:"
        << duration_cast<milliseconds>(t_man).count() << " ms." << endl;
   auto t_std = compter_inactifs_std(begin(v), end(v), inactifs);
   cout << "Compatibilite standard, nb d'inactifs sur " << N << " elements: "
        << inactifs << "\n\ttemps requis:"
        << duration_cast<milliseconds>(t_std).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 :

Compatibilite manuelle, nb d'inactifs sur 50000000 elements: 24999631
        temps requis:193 ms.
Compatibilite standard, nb d'inactifs sur 50000000 elements: 24999631
        temps requis:189 ms.
Appuyez sur une touche pour continuer...

Valid XHTML 1.0 Transitional

CSS Valide !