Grafalgo
Library of useful data structures and algorithms
/Users/jst/src/grafalgo/cpp/dataStructures/basic/perf/perfStlList.cpp
00001 #include "stdinc.h"
00002 #include <list>
00003 #include "Util.h"
00004 
00005 void perfTest(int n) {
00006         list<int> lst(n);
00007         int perm[n+1];
00008         Util::genPerm(n,perm);
00009 
00010         cout << "perfTest " << n << endl;
00011 
00012         uint32_t t0 = Util::getTime();
00013         for (int i = 1; i <= n; i++) lst.push_back(i);
00014         uint32_t t1= Util::getTime();
00015         double addBack = ((double) t1 - (double) t0)/n;
00016         cout << "appending to end: " << addBack << " us per operation\n";
00017 
00018         t0= Util::getTime();
00019         for (int i = 1; i <= n; i++) lst.pop_front();
00020         t1= Util::getTime();
00021         double removeFront = ((double) t1 - (double) t0)/n;
00022         cout << "removing from front: " << removeFront << " us per operation\n";
00023 
00024         t0 = Util::getTime();
00025         for (int i = 1; i <= n; i++) lst.push_back(perm[i]);
00026         t1= Util::getTime();
00027         double addBackRand = ((double) t1 - (double) t0)/n;
00028         cout << "appending to end in random order: " << addBack
00029              << " us per operation\n";
00030 
00031         t0= Util::getTime();
00032         for (int i = 1; i <= n; i++) lst.pop_front();
00033         t1= Util::getTime();
00034         removeFront = ((double) t1 - (double) t0)/n;
00035         cout << "removing from front: " << removeFront << " us per operation\n";
00036 
00037         list<int>::iterator p;
00038         if (n <= 10000) {
00039                 for (int i = 1; i <= n; i++) lst.push_back(perm[i]);
00040                 t0= Util::getTime();
00041                 for (int i = 1; i <= n; i++) { lst.remove(i); }
00042                 t1= Util::getTime();
00043                 double removeByValue = ((double) t1 - (double) t0)/n;
00044                 cout << "removing by value: " << removeByValue
00045                      << " us per operation\n";
00046         }
00047 
00048         for (int i = 1; i <= n; i++) lst.push_back(perm[i]);
00049         int sum = 0;
00050         t0= Util::getTime();
00051         for (p = lst.begin(); p != lst.end(); p++) sum += *p;
00052         t1= Util::getTime();
00053         double sumInOrder = ((double) t1 - (double) t0)/n;
00054         cout << "summing in order: " << sumInOrder << " us per operation "
00055              << sum << "\n";
00056 
00057         cout << endl;
00058 }
00059 
00060 main() {
00061         perfTest(100);
00062         perfTest(1000);
00063         perfTest(10000);
00064         perfTest(100000);
00065         perfTest(1000000);
00066 }
 All Classes Files Functions Variables Typedefs Friends