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 <iostream>
#include <vector>
#include <list>
#include <deque>
#include <string_view>
#include <chrono>
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 };
}
template <class C>
void test_insertion(string_view nom, int n) {
auto [r,dt] = test([conteneur = C{}, n]() mutable {
for (int i = 0; i < n; i++)
conteneur.push_back(i+1);
return conteneur.back(); // pour éviter que l'optimiseur n'élimine tout
});
cout << '\t' << nom << " : "
<< duration_cast<milliseconds>(dt).count() << " ms." << endl;
}
int main() {
enum { N = 5'000'000 };
cout << "Resultats pour " << N << " insertions (ms):" << endl;
test_insertion<vector<int>>("vector", N);
test_insertion<deque<int>>("deque", N);
test_insertion<list<int>>("list", N);
}
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) |
---|---|---|
|
|
|