Mesures – Test 0.1

Cet exemple utilise une version simplifiée de la fonction de mesure de temps présentée dans ../Sujets/AuSecours/Mesurer-le-temps.html et compile avec C++ 17 (ce n'est pas essentiel, mais ça simplifie l'écriture).

#include <algorithm>
#include <vector>
#include <deque>
#include <iostream>
#include <numeric>
#include <chrono>
#include <random>
#include <memory>
using namespace std;
using namespace std::chrono;
template <class F, class ... Args>
   auto test(F f, Args &&... args) {
      auto pre = high_resolution_clock::now();
      auto res = f(std::forward<Args>(args)...);
      auto post = high_resolution_clock::now();
      return pair{ res, post - pre };
   }
int main() {
   const int N = 5'000'000;
   unique_ptr<int[]> tab(new int[N]);
   iota(&tab[0], &tab[N], 1);
   shuffle(&tab[0], &tab[N], mt19937{ random_device{}() });
   auto [r1,dt1] = test([v = vector<int>(&tab[0], &tab[N])]() mutable {
      sort(begin(v), end(v));
      return v.back();
   });
   auto [r2,dt2] = test([d = deque<int>(&tab[0], &tab[N])]() mutable {
      sort(begin(d), end(d));
      return d.back();
   });
   auto [r0,dt0] = test([&tab]() mutable {
      sort(&tab[0], &tab[N]);
      return tab[N-1];
   });
   cout << "Resultats pour le tri de " << N << " elements (ms):" << endl
        << "\ttableau: " << duration_cast<milliseconds>(dt0).count() << " ms." << endl
        << "\tvector: " << duration_cast<milliseconds>(dt1).count() << " ms." << endl
        << "\tdeque: " << duration_cast<milliseconds>(dt2).count() << " ms." << endl;
}

Quelques résultats suivent. Portez attention aux temps relatifs pour un même compilateur, mais ne comparez pas les compilateurs entre eux, car les exécutions sont faites sur des machines distinctes :

Wandbox (lien) Coliru (lien) Visual Studio 2019 (Release, 32 bits)
Resultats pour le tri de 5000000 elements (ms):
	tableau: 565 ms.
	vector: 556 ms.
	deque: 655 ms.
Resultats pour le tri de 5000000 elements (ms):
	tableau: 402 ms.
	vector: 399 ms.
	deque: 477 ms.
Resultats pour le tri de 5000000 elements (ms):
        tableau: 521 ms.
        vector: 526 ms.
        deque: 1013 ms.

Valid XHTML 1.0 Transitional

CSS Valide !