Advertisement
Guest User

C++ vector performance test

a guest
May 13th, 2013
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.04 KB | None | 0 0
  1. // Visit "http://pastebin.com/ntBhsey0" to get the original "tVector"
  2. // Subject : Vector performance test
  3.  
  4. bool StartCounter()
  5. {
  6.     LARGE_INTEGER li;
  7.     if(!QueryPerformanceFrequency(&li))return false;
  8.  
  9.     PCFreq = double(li.QuadPart);
  10.  
  11.     QueryPerformanceCounter(&li);
  12.     CounterStart = li.QuadPart;
  13. }
  14. double GetCounter()
  15. {
  16.     LARGE_INTEGER li;
  17.     QueryPerformanceCounter(&li);
  18.     return (double(li.QuadPart-CounterStart) / PCFreq) * 1000.0f; //millisecond
  19. }
  20.  
  21.  
  22. struct foo{
  23.     inline foo(){x1 = x2 = y1 = y2 = 0;}
  24.     inline foo(int val){x1 = val;x2 = 2 * x1;y1 = x1 + rand() % 50;y2 = y1 + 100;}
  25.    
  26.         int x1, y1, x2, y2;
  27.                                                                                          
  28.     inline operator int (){return x1 + y1 + x2 + y2;}
  29.  
  30.    
  31.     inline void operator =(int value)
  32.     {x1 = y1 = x2 = y2 = 0;}
  33.  
  34.     inline void operator +=(const foo& obj)
  35.     {x1 += obj.x1;y1 += obj.y1;x2 += obj.x2;y2 += obj.y2;}
  36. };
  37.  
  38. int main()
  39. {
  40. StartCounter();
  41.  
  42.  
  43. #define __foo_object int  //definition
  44. #define __foo_name "int"  
  45.  
  46. #define __USE_TVECTOR
  47.  
  48.     int i, j;
  49.     double fTimeTotal = 0;
  50.     std::cout <<  "  Vector performance test" << std::endl;
  51.     std::cout << "----------------------------------------" << std::endl;
  52. #ifdef  __USE_TVECTOR
  53.     tVector<__foo_object> vec;
  54.     std::cout <<  "  vector custom version." << std::endl;
  55.     std::cout << "+ tVector<" << __foo_name << "> time record : " << std::endl;
  56. #else
  57.     vector<__foo_object> vec;
  58.     std::cout <<  "  vector standard version." << std::endl;
  59.     std::cout << "+ vector<int> time record : " << std::endl;
  60. #endif
  61.  
  62.     system("pause");
  63.     std::cout << "----------------------------------------" << std::endl;
  64.  
  65. ///////////////////////////push_back() test////////////////////////////////////////////////
  66. #define __MAX_ELEMENTS 100000000 / sizeof(__foo_object)
  67.     std::cout << "\tpush_back() test : ";
  68.     StartCounter();
  69.     for(i = 0;i < __MAX_ELEMENTS;i++) // requires 100 Mb memory
  70.     {
  71.             vec.push_back(__foo_object(200));
  72.     }
  73.  
  74.     fTimeTotal += GetCounter();
  75.     std::cout << GetCounter() << " ms" << std::endl;
  76.    
  77.     std::cout <<  std::endl;
  78.     std::cout << "\tpop_back() test : ";
  79.  
  80.     StartCounter();
  81.     for(i = 0;i < __MAX_ELEMENTS;i++) // Clean up
  82.     {
  83.             vec.pop_back();
  84.     }
  85.  
  86.     fTimeTotal += GetCounter();
  87.     std::cout << GetCounter() << " ms" << std::endl;
  88.  
  89.     std::cout <<  std::endl;
  90. ///////////////////////////insert() test////////////////////////////////////////////////
  91. #define __MAX_LOOPS 4000 / sizeof(__foo_object)
  92. #define __NUMBER_OF_ELEMENTS 50
  93.  
  94.     std::cout << "\tinsert() test : ";
  95.     vec.resize(1);
  96.     StartCounter();
  97.         for(j = 0;j < 100;j++)
  98.     vec.push_back(__foo_object(125));
  99.     for(i = 0;i < __MAX_LOOPS;i++)
  100.     {
  101.         for(j = 0;j < __NUMBER_OF_ELEMENTS;j++)
  102.             vec.insert(vec.begin() + 10, __foo_object(100)); // Try inserting some elements
  103.  
  104.             vec.insert(vec.begin() + 10, __NUMBER_OF_ELEMENTS, __foo_object(160));  // Try inserting multiple elements at a time
  105.     }
  106.  
  107.     fTimeTotal += GetCounter();
  108.     std::cout  << GetCounter() << " ms" << std::endl;
  109.     //std::cout << "vector size = " << vec.size() << std::endl << std::endl;
  110.  
  111.     std::cout <<  std::endl;
  112. ///////////////////////////access() test////////////////////////////////////////////////
  113.     std::cout << "\taccess() test : (sum all values)" << std::endl;
  114.     __foo_object temp = 0;
  115.     StartCounter();
  116.     for(i = 0;i < vec.size();i++)
  117.     {
  118.         temp += vec[i];
  119.         temp += vec.at(i);
  120.         temp += *(vec.begin() + i);
  121.         temp += *(vec.end() - (vec.size() - i));
  122.     }
  123.  
  124.     std::cout << "\tFinal value = " << temp << std::endl;
  125.     fTimeTotal += GetCounter();
  126.     std::cout  << "\tTime : " << GetCounter() << " ms" << std::endl;
  127.  
  128.     std::cout <<  std::endl;
  129.     std::cout << "\terase() test : ";
  130. ///////////////////////////erase() test////////////////////////////////////////////////
  131.     StartCounter();
  132.     while(vec.size())
  133.     {
  134.             vec.erase(vec.begin());
  135.     }
  136.  
  137.     fTimeTotal += GetCounter();
  138.     std::cout  << GetCounter() << " ms" << std::endl;
  139.     std::cout << "----------------------------------------" << std::endl;
  140.     std::cout << "Total time = " << fTimeTotal << " ms (" << fTimeTotal / 1000.0f << " sec)" << std::endl;
  141.  
  142. getch();
  143. return 0;
  144. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement