Advertisement
Guest User

C++ vector performance test

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