// Sample2.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "windows.h"
#include "time.h"
#include <iostream>
#include <algorithm>
#include <vector>
#include <list>
#include <deque>
using namespace std;
#define COUNT 100000
void set_value(int& i) { i = rand(); }
template <class V>
class trait_sort
{
public:
static void sort_data(V& v)
{
sort(v.begin(), v.end());
}
} ;
template <>
class trait_sort < list<int> >
{
public:
static void sort_data(V& v)
{
v.sort();
}
} ;
template <class V>
class trait_print
{
public:
static void print_result(unsigned long t)
{
cout << "cost time for vector sorting: " << t << "ms" << endl;
}
} ;
template <>
class trait_print < list<int> >
{
public:
static void print_result(unsigned long t)
{
cout << "cost time for list sorting: " << t << "ms" << endl;
}
} ;
template <>
class trait_print < deque<int> >
{
public:
static void print_result(unsigned long t)
{
cout << "cost time for deque sorting: " << t << "ms" << endl;
}
} ;
template <class V, class S = trait_sort<V>, class P = trait_print<V> >
struct sorttimer
{
operator() (V& v)
{
v.swap(V(COUNT));
for_each(v.begin(), v.end(), set_value);
unsigned long t1 = GetTickCount();
trait_sort<V>::sort_data(v);
unsigned long t2 = GetTickCount();
trait_print<V>::print_result(t2 - t1);
}
};
int main(int argc, char* argv[])
{
srand(unsigned(time(NULL)));
sorttimer< vector<int> >()(vector<int>());
sorttimer< list<int> >()(list<int>());
sorttimer< deque<int> >()(deque<int>());
return 0;
}