1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
| #include <vector>
#include <string>
#include <cstdlib>
#include <ctime>
#include <algorithm>
//#include <boost/foreach.hpp>
using namespace std;
int main()
{
vector<string> strVec(1000);
vector<string> strVec2(1000);
vector<int> intVec(1000);
vector<int> intVec2(1000);
for (size_t i = 0; i < strVec.size(); ++i)
{
for (int j = 0; j < 10; ++j)
{
//Seul 5 caractères diffèrent sont utilisé, pour compenser le fait que
//certains caractères sont plus courant que d'autre.
//C'est effectivement un choix totalement arbitraire
strVec [i].push_back('a' + (rand() % 5));
strVec2[i].push_back('a' + (rand() % 5));
}
}
//BOOST_FOREACH(int &i, intVec)
for (vector<int>::iterator iter = intVec.begin(); iter != intVec.end(); ++iter)
{
int &i = *iter;
i = rand() % 1000000000;
}
//BOOST_FOREACH(int &i, intVec2)
for (vector<int>::iterator iter = intVec2.begin(); iter != intVec2.end(); ++iter)
{
int &i = *iter;
i = rand() % 1000000000;
}
bool b = false;
clock_t startTime = clock();
for (int i = 0; i < 1000000; ++i)
{
vector<string>::iterator strIter1 = strVec.begin();
vector<string>::iterator strIter2 = strVec2.begin();
while (strIter1 != strVec.end())
{
b = (*strIter1) < (*strIter2);
++strIter1;
++strIter2;
}
}
clock_t endTime = clock();
clock_t startTime2 = clock();
for (int i = 0; i < 1000000; ++i)
{
vector<int>::iterator intIter1 = intVec.begin();
vector<int>::iterator intIter2 = intVec2.begin();
while (intIter1 != intVec.end())
{
b = (*intIter1) < (*intIter2);
++intIter1;
++intIter2;
}
}
clock_t endTime2 = clock();
std::cout << b << std::endl;
std::cout << "string : " << (endTime - startTime) << " - int : " << (endTime2 - startTime2) << std::endl;
std::cout << "ratio : " << double(endTime - startTime) / double(endTime2 - startTime2) << std::endl;
}; |