- 论坛徽章:
- 0
|
g++ 4.6.3 x86-64
-std=gnu++0x -Wall -Wextra -O2- #include <algorithm>
- #include <iostream>
- #include <list>
- #include <stdint.h>
- using namespace std;
- inline uint64_t rdtsc()
- {
- uint32_t eax, edx;
- asm("rdtsc" : "=a"(eax), "=d"(edx));
- return ((uint64_t)edx << 32) | eax;
- }
- int main(void){
- int const LOOP = 50000;
- typedef int valuetype;
- typedef list<valuetype> li;
- {
- // CPU warming up
- uint64_t const CLOCKS_TO_WAIT = 1000000000;
- uint64_t start = rdtsc();
- while(rdtsc() - start < CLOCKS_TO_WAIT)
- ;
- }
- {
- li vli;
- for(int i=0;i<LOOP;++i){
- vli.push_back(1);
- vli.push_back(2);
- }
- uint64_t ret1 = rdtsc();
- vli.remove(2);
- uint64_t ret2 = rdtsc();
- cout<<"list shrink:"<<ret2-ret1<<endl;
- }
- {
- li vli;
- for(int i=0;i<LOOP;++i){
- vli.push_back(1);
- vli.push_back(2);
- }
- uint64_t ret1 = rdtsc();
- vli.erase(remove_if(vli.begin(),vli.end(),[=](valuetype i){return i==2;}), vli.end());
- uint64_t ret2 = rdtsc();
- cout<<"list shrink:"<<ret2-ret1<<endl;
- }
- {
- li vli;
- for(int i=0;i<LOOP;++i){
- vli.push_back(1);
- vli.push_back(2);
- }
- uint64_t ret1 = rdtsc();
- vli.erase(remove(vli.begin(),vli.end(),2),vli.end());
- uint64_t ret2 = rdtsc();
- cout<<"list shrink:"<<ret2-ret1<<endl;
- }
- return 0;
- }
复制代码 list shrink:2559236
list shrink:4978882
list shrink:4897164 |
|