Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Visit "http://pastebin.com/ntBhsey0" to get the original "tVector"
- // Subject : Vector performance test
- bool StartCounter()
- {
- LARGE_INTEGER li;
- if(!QueryPerformanceFrequency(&li))return false;
- PCFreq = double(li.QuadPart);
- QueryPerformanceCounter(&li);
- CounterStart = li.QuadPart;
- }
- double GetCounter()
- {
- LARGE_INTEGER li;
- QueryPerformanceCounter(&li);
- return (double(li.QuadPart-CounterStart) / PCFreq) * 1000.0f; //millisecond
- }
- struct foo{
- inline foo(){x1 = x2 = y1 = y2 = 0;}
- inline foo(int val){x1 = val;x2 = 2 * x1;y1 = x1 + rand() % 50;y2 = y1 + 100;}
- int x1, y1, x2, y2;
- inline operator int (){return x1 + y1 + x2 + y2;}
- inline void operator =(int value)
- {x1 = y1 = x2 = y2 = 0;}
- inline void operator +=(const foo& obj)
- {x1 += obj.x1;y1 += obj.y1;x2 += obj.x2;y2 += obj.y2;}
- };
- int main()
- {
- StartCounter();
- #define __foo_object int //definition
- #define __foo_name "int"
- #define __USE_TVECTOR
- int i, j;
- double fTimeTotal = 0;
- std::cout << " Vector performance test" << std::endl;
- std::cout << "----------------------------------------" << std::endl;
- #ifdef __USE_TVECTOR
- tVector<__foo_object> vec;
- std::cout << " vector custom version." << std::endl;
- std::cout << "+ tVector<" << __foo_name << "> time record : " << std::endl;
- #else
- vector<__foo_object> vec;
- std::cout << " vector standard version." << std::endl;
- std::cout << "+ vector<int> time record : " << std::endl;
- #endif
- system("pause");
- std::cout << "----------------------------------------" << std::endl;
- ///////////////////////////push_back() test////////////////////////////////////////////////
- #define __MAX_ELEMENTS 100000000 / sizeof(__foo_object)
- std::cout << "\tpush_back() test : ";
- StartCounter();
- for(i = 0;i < __MAX_ELEMENTS;i++) // requires 100 Mb memory
- {
- vec.push_back(__foo_object(200));
- }
- fTimeTotal += GetCounter();
- std::cout << GetCounter() << " ms" << std::endl;
- std::cout << std::endl;
- std::cout << "\tpop_back() test : ";
- StartCounter();
- for(i = 0;i < __MAX_ELEMENTS;i++) // Clean up
- {
- vec.pop_back();
- }
- fTimeTotal += GetCounter();
- std::cout << GetCounter() << " ms" << std::endl;
- std::cout << std::endl;
- ///////////////////////////insert() test////////////////////////////////////////////////
- #define __MAX_LOOPS 4000 / sizeof(__foo_object)
- #define __NUMBER_OF_ELEMENTS 50
- std::cout << "\tinsert() test : ";
- vec.resize(1);
- StartCounter();
- for(j = 0;j < 100;j++)
- vec.push_back(__foo_object(125));
- for(i = 0;i < __MAX_LOOPS;i++)
- {
- for(j = 0;j < __NUMBER_OF_ELEMENTS;j++)
- vec.insert(vec.begin() + 10, __foo_object(100)); // Try inserting some elements
- vec.insert(vec.begin() + 10, __NUMBER_OF_ELEMENTS, __foo_object(160)); // Try inserting multiple elements at a time
- }
- fTimeTotal += GetCounter();
- std::cout << GetCounter() << " ms" << std::endl;
- //std::cout << "vector size = " << vec.size() << std::endl << std::endl;
- std::cout << std::endl;
- ///////////////////////////access() test////////////////////////////////////////////////
- std::cout << "\taccess() test : (sum all values)" << std::endl;
- __foo_object temp = 0;
- StartCounter();
- for(i = 0;i < vec.size();i++)
- {
- temp += vec[i];
- temp += vec.at(i);
- temp += *(vec.begin() + i);
- temp += *(vec.end() - (vec.size() - i));
- }
- std::cout << "\tFinal value = " << temp << std::endl;
- fTimeTotal += GetCounter();
- std::cout << "\tTime : " << GetCounter() << " ms" << std::endl;
- std::cout << std::endl;
- std::cout << "\terase() test : ";
- ///////////////////////////erase() test////////////////////////////////////////////////
- StartCounter();
- while(vec.size())
- {
- vec.erase(vec.begin());
- }
- fTimeTotal += GetCounter();
- std::cout << GetCounter() << " ms" << std::endl;
- std::cout << "----------------------------------------" << std::endl;
- std::cout << "Total time = " << fTimeTotal << " ms (" << fTimeTotal / 1000.0f << " sec)" << std::endl;
- getch();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement