vector/list/set/map 遍历耗时统计
#include<Windows.h> #include <iostream> #include<fstream> #include<vector> #include<list> #include<set> #include <map> #include <string> using namespace std; #define NUM1 10 //外层循环10次 #define NUM2 100000000 //对于int、dword的1亿次i++和++i #define NUM3 100000//对与包含10万个元素容器的iter++和++iter #ifdef _DEBUG #define _FNAME "debug_"#else
#define _FNAME "release_"#endif
typedef struct _ElemType1{
DWORD dw; _ElemType1(DWORD _dw=0):dw(_dw) { } bool operator<(_ElemType1 const &t1) const { return this->dw<t1.dw; } }ElemType1; typedef struct _ElemType2{
string str; _ElemType2(string _str=""):str(_str) { } bool operator<(_ElemType2 const &t1) const { return this->str<t1.str; } }ElemType2; void test1_int_i(ofstream &of); void test1_dword_i(ofstream &of); void test2_vec_type1(ofstream &of); void test2_vec_type2(ofstream &of); void test3_list_type1(ofstream &of); void test3_list_type2(ofstream &of); void test4_set_type1(ofstream &of); void test4_set_type2(ofstream &of); void test5_map_type1(ofstream &of); void test5_map_type2(ofstream &of); void test1_int_i(ofstream &of){
volatile int i=0,j=0; DWORD dw1,dw2,total=0; cout<<"int类型:"<<endl; of<<"int类型:"<<endl; cout<<"i++测试:"<<endl; of<<"i++测试:"<<endl; for(;j<NUM1;++j) { dw1 = ::GetTickCount(); while (i<NUM2) { i++; } dw2 = ::GetTickCount(); i=0; cout<<j<<" : "<<dw2-dw1<<endl; of<<j<<" : "<<dw2-dw1<<endl; total+=dw2-dw1; } cout<<"总消耗:"<<total<<endl; of<<"总消耗:"<<total<<endl; cout<<"平均消耗:"<<float(total)/NUM1<<endl; of<<"平均消耗:"<<float(total)/NUM1<<endl; cout<<endl; of<<endl; i = j = 0; total = 0; cout<<"++i测试:"<<endl; of<<"++i测试:"<<endl; for(;j<NUM1;++j) { dw1 = ::GetTickCount(); while (i<NUM2) { ++i; } dw2 = ::GetTickCount(); i=0; cout<<j<<" : "<<dw2-dw1<<endl; of<<j<<" : "<<dw2-dw1<<endl; total+=dw2-dw1; } cout<<"总消耗:"<<total<<endl; of<<"总消耗:"<<total<<endl; cout<<"平均消耗:"<<float(total)/NUM1<<endl; of<<"平均消耗:"<<float(total)/NUM1<<endl; cout<<endl; of<<endl;}
void test1_dword_i(ofstream &of){
volatile DWORD i=0,j=0; DWORD dw1,dw2,total=0; cout<<"DWORD类型:"<<endl; of<<"DWORD类型:"<<endl; cout<<"i++测试:"<<endl; of<<"i++测试:"<<endl; for(;j<NUM1;++j) { dw1 = ::GetTickCount(); while (i<NUM2) { i++; } dw2 = ::GetTickCount(); i=0; cout<<j<<" : "<<dw2-dw1<<endl; of<<j<<" : "<<dw2-dw1<<endl; total+=dw2-dw1; } cout<<"总消耗:"<<total<<endl; of<<"总消耗:"<<total<<endl; cout<<"平均消耗:"<<float(total)/NUM1<<endl; of<<"平均消耗:"<<float(total)/NUM1<<endl; cout<<endl; of<<endl; i = j = 0; total = 0; cout<<"++i测试:"<<endl; of<<"++i测试:"<<endl; for(;j<NUM1;++j) { dw1 = ::GetTickCount(); while (i<NUM2) { ++i; } dw2 = ::GetTickCount(); i=0; cout<<j<<" : "<<dw2-dw1<<endl; of<<j<<" : "<<dw2-dw1<<endl; total+=dw2-dw1; } cout<<"总消耗:"<<total<<endl; of<<"总消耗:"<<total<<endl; cout<<"平均消耗:"<<float(total)/NUM1<<endl; of<<"平均消耗:"<<float(total)/NUM1<<endl; cout<<endl; of<<endl;}
DWORD g_dwFlag=0; void test2_vec_type1(ofstream &of){
ElemType1 t1; vector<ElemType1> vec1(NUM3,t1); DWORD dw1,dw2,total=0; cout<<"vector,使用type1:"<<endl; of<<"vector,使用type1:"<<endl; cout<<"iter++测试:"<<endl; of<<"iter++测试:"<<endl; int i = 0,j=0; vector<ElemType1>::iterator iter; vector<ElemType1>::const_iterator citer; for(;i<NUM1;++i) { iter = vec1.begin(); dw1 = ::GetTickCount(); while (iter!=vec1.end()) { #ifdef NDEBUG g_dwFlag+=i;#endif
iter++; } dw2 = ::GetTickCount(); cout<<i<<" : "<<dw2-dw1<<endl; of<<i<<" : "<<dw2-dw1<<endl; total+=dw2-dw1; } cout<<"总消耗:"<<total<<endl; of<<"总消耗:"<<total<<endl; cout<<"平均消耗:"<<float(total)/NUM1<<endl; of<<"平均消耗:"<<float(total)/NUM1<<endl; cout<<endl; of<<endl; i=0; total=0; cout<<"++iter测试:"<<endl; of<<"++iter测试:"<<endl; for(;i<NUM1;++i) { dw1 = ::GetTickCount(); iter = vec1.begin(); while (iter!=vec1.end()) { #ifdef NDEBUG g_dwFlag+=i;#endif
++iter; } dw2 = ::GetTickCount(); cout<<i<<" : "<<dw2-dw1<<endl; of<<i<<" : "<<dw2-dw1<<endl; total+=dw2-dw1; } cout<<"总消耗:"<<total<<endl; of<<"总消耗:"<<total<<endl; cout<<"平均消耗:"<<float(total)/NUM1<<endl; of<<"平均消耗:"<<float(total)/NUM1<<endl; cout<<endl; of<<endl; i=0; total=0; cout<<"citer++测试:"<<endl; of<<"citer++测试:"<<endl; for(;i<NUM1;++i) { dw1 = ::GetTickCount(); citer = vec1.begin(); while (citer!=vec1.end()) { #ifdef NDEBUG g_dwFlag+=i;#endif
citer++; } dw2 = ::GetTickCount(); cout<<i<<" : "<<dw2-dw1<<endl; of<<i<<" : "<<dw2-dw1<<endl; total+=dw2-dw1; } cout<<"总消耗:"<<total<<endl; of<<"总消耗:"<<total<<endl; cout<<"平均消耗:"<<float(total)/NUM1<<endl; of<<"平均消耗:"<<float(total)/NUM1<<endl; cout<<endl; of<<endl; i=0; total=0; cout<<"++citer测试:"<<endl; of<<"++citer测试:"<<endl; for(;i<NUM1;++i) { dw1 = ::GetTickCount(); citer = vec1.begin(); while (citer!=vec1.end()) { #ifdef NDEBUG g_dwFlag+=i;#endif
++citer; } dw2 = ::GetTickCount(); cout<<i<<" : "<<dw2-dw1<<endl; of<<i<<" : "<<dw2-dw1<<endl; total+=dw2-dw1; } cout<<"总消耗:"<<total<<endl; of<<"总消耗:"<<total<<endl; cout<<"平均消耗:"<<float(total)/NUM1<<endl; of<<"平均消耗:"<<float(total)/NUM1<<endl; cout<<endl; of<<endl;}
void test2_vec_type2(ofstream &of){
ElemType2 t2; vector<ElemType2> vec1(NUM3,t2); DWORD dw1,dw2,total=0; cout<<"vector,使用type2:"<<endl; of<<"vector,使用type2:"<<endl; cout<<"iter++测试:"<<endl; of<<"iter++测试:"<<endl; int i = 0,j=0; vector<ElemType2>::iterator iter; vector<ElemType2>::const_iterator citer; for(;i<NUM1;++i) { dw1 = ::GetTickCount(); iter = vec1.begin(); while (iter!=vec1.end()) { #ifdef NDEBUG g_dwFlag+=i;#endif
iter++; } dw2 = ::GetTickCount(); cout<<i<<" : "<<dw2-dw1<<endl; of<<i<<" : "<<dw2-dw1<<endl; total+=dw2-dw1; } cout<<"总消耗:"<<total<<endl; of<<"总消耗:"<<total<<endl; cout<<"平均消耗:"<<float(total)/NUM1<<endl; of<<"平均消耗:"<<float(total)/NUM1<<endl; cout<<endl; of<<endl; i=0; total=0; cout<<"++iter测试:"<<endl; of<<"++iter测试:"<<endl; for(;i<NUM1;++i) { dw1 = ::GetTickCount(); iter = vec1.begin(); while (iter!=vec1.end()) { #ifdef NDEBUG g_dwFlag+=i;#endif
++iter; } dw2 = ::GetTickCount(); cout<<i<<" : "<<dw2-dw1<<endl; of<<i<<" : "<<dw2-dw1<<endl; total+=dw2-dw1; } cout<<"总消耗:"<<total<<endl; of<<"总消耗:"<<total<<endl; cout<<"平均消耗:"<<float(total)/NUM1<<endl; of<<"平均消耗:"<<float(total)/NUM1<<endl; cout<<endl; of<<endl; i=0; total=0; cout<<"citer++测试:"<<endl; of<<"citer++测试:"<<endl; for(;i<NUM1;++i) { dw1 = ::GetTickCount(); citer = vec1.begin(); while (citer!=vec1.end()) { #ifdef NDEBUG g_dwFlag+=i;#endif
citer++; } dw2 = ::GetTickCount(); cout<<i<<" : "<<dw2-dw1<<endl; of<<i<<" : "<<dw2-dw1<<endl; total+=dw2-dw1; } cout<<"总消耗:"<<total<<endl; of<<"总消耗:"<<total<<endl; cout<<"平均消耗:"<<float(total)/NUM1<<endl; of<<"平均消耗:"<<float(total)/NUM1<<endl; cout<<endl; of<<endl; i=0; total=0; cout<<"++citer测试:"<<endl; of<<"++citer测试:"<<endl; for(;i<NUM1;++i) { dw1 = ::GetTickCount(); citer = vec1.begin(); while (citer!=vec1.end()) { #ifdef NDEBUG g_dwFlag+=i;#endif
++citer; } dw2 = ::GetTickCount(); cout<<i<<" : "<<dw2-dw1<<endl; of<<i<<" : "<<dw2-dw1<<endl; total+=dw2-dw1; } cout<<"总消耗:"<<total<<endl; of<<"总消耗:"<<total<<endl; cout<<"平均消耗:"<<float(total)/NUM1<<endl; of<<"平均消耗:"<<float(total)/NUM1<<endl; cout<<endl; of<<endl;}
void test3_list_type1(ofstream &of){
ElemType1 t1; list<ElemType1> ls(NUM3,t1); DWORD dw1,dw2,total=0; cout<<"list,使用type1:"<<endl; of<<"list,使用type1:"<<endl; cout<<"iter++测试:"<<endl; of<<"iter++测试:"<<endl; int i = 0,j=0; list<ElemType1>::iterator iter; list<ElemType1>::const_iterator citer; for(;i<NUM1;++i) { dw1 = ::GetTickCount(); iter = ls.begin(); while (iter!=ls.end()) { #ifdef NDEBUG g_dwFlag+=i;#endif
iter++; } dw2 = ::GetTickCount(); cout<<i<<" : "<<dw2-dw1<<endl; of<<i<<" : "<<dw2-dw1<<endl; total+=dw2-dw1; } cout<<"总消耗:"<<total<<endl; of<<"总消耗:"<<total<<endl; cout<<"平均消耗:"<<float(total)/NUM1<<endl; of<<"平均消耗:"<<float(total)/NUM1<<endl; cout<<endl; of<<endl; i=0; total=0; cout<<"++iter测试:"<<endl; of<<"++iter测试:"<<endl; for(;i<NUM1;++i) { dw1 = ::GetTickCount(); iter = ls.begin(); while (iter!=ls.end()) { #ifdef NDEBUG g_dwFlag+=i;#endif
++iter; } dw2 = ::GetTickCount(); cout<<i<<" : "<<dw2-dw1<<endl; of<<i<<" : "<<dw2-dw1<<endl; total+=dw2-dw1; } cout<<"总消耗:"<<total<<endl; of<<"总消耗:"<<total<<endl; cout<<"平均消耗:"<<float(total)/NUM1<<endl; of<<"平均消耗:"<<float(total)/NUM1<<endl; cout<<endl; of<<endl; i=0; total=0; cout<<"citer++测试:"<<endl; of<<"citer++测试:"<<endl; for(;i<NUM1;++i) { dw1 = ::GetTickCount(); citer = ls.begin(); while (citer!=ls.end()) { #ifdef NDEBUG g_dwFlag+=i;#endif
citer++; } dw2 = ::GetTickCount(); cout<<i<<" : "<<dw2-dw1<<endl; of<<i<<" : "<<dw2-dw1<<endl; total+=dw2-dw1; } cout<<"总消耗:"<<total<<endl; of<<"总消耗:"<<total<<endl; cout<<"平均消耗:"<<float(total)/NUM1<<endl; of<<"平均消耗:"<<float(total)/NUM1<<endl; cout<<endl; of<<endl; i=0; total=0; cout<<"++citer测试:"<<endl; of<<"++citer测试:"<<endl; for(;i<NUM1;++i) { dw1 = ::GetTickCount(); citer = ls.begin(); while (citer!=ls.end()) { #ifdef NDEBUG g_dwFlag+=i;#endif
++citer; } dw2 = ::GetTickCount(); cout<<i<<" : "<<dw2-dw1<<endl; of<<i<<" : "<<dw2-dw1<<endl; total+=dw2-dw1; } cout<<"总消耗:"<<total<<endl; of<<"总消耗:"<<total<<endl; cout<<"平均消耗:"<<float(total)/NUM1<<endl; of<<"平均消耗:"<<float(total)/NUM1<<endl; cout<<endl; of<<endl;}
void test3_list_type2(ofstream &of){
ElemType2 t2; list<ElemType2> ls(NUM3,t2); DWORD dw1,dw2,total=0; cout<<"list,使用type2:"<<endl; of<<"list,使用type2:"<<endl; cout<<"iter++测试:"<<endl; of<<"iter++测试:"<<endl; int i = 0,j=0; list<ElemType2>::iterator iter; list<ElemType2>::const_iterator citer; for(;i<NUM1;++i) { dw1 = ::GetTickCount(); iter = ls.begin(); while (iter!=ls.end()) { #ifdef NDEBUG g_dwFlag+=i;#endif
iter++; } dw2 = ::GetTickCount(); cout<<i<<" : "<<dw2-dw1<<endl; of<<i<<" : "<<dw2-dw1<<endl; total+=dw2-dw1; } cout<<"总消耗:"<<total<<endl; of<<"总消耗:"<<total<<endl; cout<<"平均消耗:"<<float(total)/NUM1<<endl; of<<"平均消耗:"<<float(total)/NUM1<<endl; cout<<endl; of<<endl; i=0; total=0; cout<<"++iter测试:"<<endl; of<<"++iter测试:"<<endl; for(;i<NUM1;++i) { dw1 = ::GetTickCount(); iter = ls.begin(); while (iter!=ls.end()) { #ifdef NDEBUG g_dwFlag+=i;#endif
++iter; } dw2 = ::GetTickCount(); cout<<i<<" : "<<dw2-dw1<<endl; of<<i<<" : "<<dw2-dw1<<endl; total+=dw2-dw1; } cout<<"总消耗:"<<total<<endl; of<<"总消耗:"<<total<<endl; cout<<"平均消耗:"<<float(total)/NUM1<<endl; of<<"平均消耗:"<<float(total)/NUM1<<endl; cout<<endl; of<<endl; i=0; total=0; cout<<"citer++测试:"<<endl; of<<"citer++测试:"<<endl; for(;i<NUM1;++i) { dw1 = ::GetTickCount(); citer = ls.begin(); while (citer!=ls.end()) { #ifdef NDEBUG g_dwFlag+=i;#endif
citer++; } dw2 = ::GetTickCount(); cout<<i<<" : "<<dw2-dw1<<endl; of<<i<<" : "<<dw2-dw1<<endl; total+=dw2-dw1; } cout<<"总消耗:"<<total<<endl; of<<"总消耗:"<<total<<endl; cout<<"平均消耗:"<<float(total)/NUM1<<endl; of<<"平均消耗:"<<float(total)/NUM1<<endl; cout<<endl; of<<endl; i=0; total=0; cout<<"++citer测试:"<<endl; of<<"++citer测试:"<<endl; for(;i<NUM1;++i) { dw1 = ::GetTickCount(); citer = ls.begin(); while (citer!=ls.end()) { #ifdef NDEBUG g_dwFlag+=i;#endif
++citer; } dw2 = ::GetTickCount(); cout<<i<<" : "<<dw2-dw1<<endl; of<<i<<" : "<<dw2-dw1<<endl; total+=dw2-dw1; } cout<<"总消耗:"<<total<<endl; of<<"总消耗:"<<total<<endl; cout<<"平均消耗:"<<float(total)/NUM1<<endl; of<<"平均消耗:"<<float(total)/NUM1<<endl; cout<<endl; of<<endl;}
void test4_set_type1(ofstream &of){
set<ElemType1> ls; for (int n=0;n<NUM3;++n) { ls.insert(_ElemType1(n)); } DWORD dw1,dw2,total=0; cout<<"set,使用type1:"<<endl; of<<"set,使用type1:"<<endl; cout<<"iter++测试:"<<endl; of<<"iter++测试:"<<endl; int i = 0,j=0; set<ElemType1>::iterator iter; set<ElemType1>::const_iterator citer; for(;i<NUM1;++i) { iter = ls.begin(); dw1 = ::GetTickCount(); while (iter!=ls.end()) { iter++; } dw2 = ::GetTickCount(); cout<<i<<" : "<<dw2-dw1<<endl; of<<i<<" : "<<dw2-dw1<<endl; total+=dw2-dw1; } cout<<"总消耗:"<<total<<endl; of<<"总消耗:"<<total<<endl; cout<<"平均消耗:"<<float(total)/NUM1<<endl; of<<"平均消耗:"<<float(total)/NUM1<<endl; cout<<endl; of<<endl; i=0; total=0; cout<<"++iter测试:"<<endl; of<<"++iter测试:"<<endl; for(;i<NUM1;++i) { iter = ls.begin(); dw1 = ::GetTickCount(); while (iter!=ls.end()) { ++iter; } dw2 = ::GetTickCount(); cout<<i<<" : "<<dw2-dw1<<endl; of<<i<<" : "<<dw2-dw1<<endl; total+=dw2-dw1; } cout<<"总消耗:"<<total<<endl; of<<"总消耗:"<<total<<endl; cout<<"平均消耗:"<<float(total)/NUM1<<endl; of<<"平均消耗:"<<float(total)/NUM1<<endl; cout<<endl; of<<endl; i=0; total=0; cout<<"citer++测试:"<<endl; of<<"citer++测试:"<<endl; for(;i<NUM1;++i) { citer = ls.begin(); dw1 = ::GetTickCount(); while (citer!=ls.end()) { citer++; } dw2 = ::GetTickCount(); cout<<i<<" : "<<dw2-dw1<<endl; of<<i<<" : "<<dw2-dw1<<endl; total+=dw2-dw1; } cout<<"总消耗:"<<total<<endl; of<<"总消耗:"<<total<<endl; cout<<"平均消耗:"<<float(total)/NUM1<<endl; of<<"平均消耗:"<<float(total)/NUM1<<endl; cout<<endl; of<<endl; i=0; total=0; cout<<"++citer测试:"<<endl; of<<"++citer测试:"<<endl; for(;i<NUM1;++i) { citer = ls.begin(); dw1 = ::GetTickCount(); while (citer!=ls.end()) { ++citer; } dw2 = ::GetTickCount(); cout<<i<<" : "<<dw2-dw1<<endl; of<<i<<" : "<<dw2-dw1<<endl; total+=dw2-dw1; } cout<<"总消耗:"<<total<<endl; of<<"总消耗:"<<total<<endl; cout<<"平均消耗:"<<float(total)/NUM1<<endl; of<<"平均消耗:"<<float(total)/NUM1<<endl; cout<<endl; of<<endl;}
void test4_set_type2(ofstream &of){
set<ElemType2> ls; char sz[255]; for (int n=0;n<NUM3;++n) { itoa(n,sz,10); ls.insert(ElemType2(sz)); } DWORD dw1,dw2,total=0; cout<<"set,使用type2:"<<endl; of<<"set,使用type2:"<<endl; cout<<"iter++测试:"<<endl; of<<"iter++测试:"<<endl; int i = 0,j=0; set<ElemType2>::iterator iter; set<ElemType2>::const_iterator citer; for(;i<NUM1;++i) { iter = ls.begin(); dw1 = ::GetTickCount(); while (iter!=ls.end()) { iter++; } dw2 = ::GetTickCount(); cout<<i<<" : "<<dw2-dw1<<endl; of<<i<<" : "<<dw2-dw1<<endl; total+=dw2-dw1; } cout<<"总消耗:"<<total<<endl; of<<"总消耗:"<<total<<endl; cout<<"平均消耗:"<<float(total)/NUM1<<endl; of<<"平均消耗:"<<float(total)/NUM1<<endl; cout<<endl; of<<endl; i=0; total=0; cout<<"++iter测试:"<<endl; of<<"++iter测试:"<<endl; for(;i<NUM1;++i) { iter = ls.begin(); dw1 = ::GetTickCount(); while (iter!=ls.end()) { ++iter; } dw2 = ::GetTickCount(); cout<<i<<" : "<<dw2-dw1<<endl; of<<i<<" : "<<dw2-dw1<<endl; total+=dw2-dw1; } cout<<"总消耗:"<<total<<endl; of<<"总消耗:"<<total<<endl; cout<<"平均消耗:"<<float(total)/NUM1<<endl; of<<"平均消耗:"<<float(total)/NUM1<<endl; cout<<endl; of<<endl; i=0; total=0; cout<<"citer++测试:"<<endl; of<<"citer++测试:"<<endl; for(;i<NUM1;++i) { citer = ls.begin(); dw1 = ::GetTickCount(); while (citer!=ls.end()) { citer++; } dw2 = ::GetTickCount(); cout<<i<<" : "<<dw2-dw1<<endl; of<<i<<" : "<<dw2-dw1<<endl; total+=dw2-dw1; } cout<<"总消耗:"<<total<<endl; of<<"总消耗:"<<total<<endl; cout<<"平均消耗:"<<float(total)/NUM1<<endl; of<<"平均消耗:"<<float(total)/NUM1<<endl; cout<<endl; of<<endl; i=0; total=0; cout<<"++citer测试:"<<endl; of<<"++citer测试:"<<endl; for(;i<NUM1;++i) { citer = ls.begin(); dw1 = ::GetTickCount(); while (citer!=ls.end()) { ++citer; } dw2 = ::GetTickCount(); cout<<i<<" : "<<dw2-dw1<<endl; of<<i<<" : "<<dw2-dw1<<endl; total+=dw2-dw1; } cout<<"总消耗:"<<total<<endl; of<<"总消耗:"<<total<<endl; cout<<"平均消耗:"<<float(total)/NUM1<<endl; of<<"平均消耗:"<<float(total)/NUM1<<endl; cout<<endl; of<<endl;}
void test5_map_type1(ofstream &of){
map<int,ElemType1> ls; for (int n=0;n<NUM3;++n) { ls.insert(pair<int,ElemType1>(n,ElemType1(n))); } DWORD dw1,dw2,total=0; cout<<"map,使用type1:"<<endl; of<<"map,使用type1:"<<endl; cout<<"iter++测试:"<<endl; of<<"iter++测试:"<<endl; int i = 0,j=0; map<int,ElemType1>::iterator iter; map<int,ElemType1>::const_iterator citer; for(;i<NUM1;++i) { iter = ls.begin(); dw1 = ::GetTickCount(); while (iter!=ls.end()) { iter++; } dw2 = ::GetTickCount(); cout<<i<<" : "<<dw2-dw1<<endl; of<<i<<" : "<<dw2-dw1<<endl; total+=dw2-dw1; } cout<<"总消耗:"<<total<<endl; of<<"总消耗:"<<total<<endl; cout<<"平均消耗:"<<float(total)/NUM1<<endl; of<<"平均消耗:"<<float(total)/NUM1<<endl; cout<<endl; of<<endl; i=0; total=0; cout<<"++iter测试:"<<endl; of<<"++iter测试:"<<endl; for(;i<NUM1;++i) { iter = ls.begin(); dw1 = ::GetTickCount(); while (iter!=ls.end()) { ++iter; } dw2 = ::GetTickCount(); cout<<i<<" : "<<dw2-dw1<<endl; of<<i<<" : "<<dw2-dw1<<endl; total+=dw2-dw1; } cout<<"总消耗:"<<total<<endl; of<<"总消耗:"<<total<<endl; cout<<"平均消耗:"<<float(total)/NUM1<<endl; of<<"平均消耗:"<<float(total)/NUM1<<endl; cout<<endl; of<<endl; i=0; total=0; cout<<"citer++测试:"<<endl; of<<"citer++测试:"<<endl; for(;i<NUM1;++i) { citer = ls.begin(); dw1 = ::GetTickCount(); while (citer!=ls.end()) { citer++; } dw2 = ::GetTickCount(); cout<<i<<" : "<<dw2-dw1<<endl; of<<i<<" : "<<dw2-dw1<<endl; total+=dw2-dw1; } cout<<"总消耗:"<<total<<endl; of<<"总消耗:"<<total<<endl; cout<<"平均消耗:"<<float(total)/NUM1<<endl; of<<"平均消耗:"<<float(total)/NUM1<<endl; cout<<endl; of<<endl; i=0; total=0; cout<<"++citer测试:"<<endl; of<<"++citer测试:"<<endl; for(;i<NUM1;++i) { citer = ls.begin(); dw1 = ::GetTickCount(); while (citer!=ls.end()) { ++citer; } dw2 = ::GetTickCount(); cout<<i<<" : "<<dw2-dw1<<endl; of<<i<<" : "<<dw2-dw1<<endl; total+=dw2-dw1; } cout<<"总消耗:"<<total<<endl; of<<"总消耗:"<<total<<endl; cout<<"平均消耗:"<<float(total)/NUM1<<endl; of<<"平均消耗:"<<float(total)/NUM1<<endl; cout<<endl; of<<endl;}
void test5_map_type2(ofstream &of){
map<int,ElemType2> ls; char sz[255]; for (int n=0;n<NUM3;++n) { itoa(n,sz,10); ls.insert(pair<int,ElemType2>(n,ElemType2(sz))); } DWORD dw1,dw2,total=0; cout<<"map,使用type2:"<<endl; of<<"map,使用type2:"<<endl; cout<<"iter++测试:"<<endl; of<<"iter++测试:"<<endl; int i = 0,j=0; map<int,ElemType2>::iterator iter; map<int,ElemType2>::const_iterator citer; for(;i<NUM1;++i) { iter = ls.begin(); dw1 = ::GetTickCount(); while (iter!=ls.end()) { iter++; } dw2 = ::GetTickCount(); cout<<i<<" : "<<dw2-dw1<<endl; of<<i<<" : "<<dw2-dw1<<endl; total+=dw2-dw1; } cout<<"总消耗:"<<total<<endl; of<<"总消耗:"<<total<<endl; cout<<"平均消耗:"<<float(total)/NUM1<<endl; of<<"平均消耗:"<<float(total)/NUM1<<endl; cout<<endl; of<<endl; i=0; total=0; cout<<"++iter测试:"<<endl; of<<"++iter测试:"<<endl; for(;i<NUM1;++i) { iter = ls.begin(); dw1 = ::GetTickCount(); while (iter!=ls.end()) { ++iter; } dw2 = ::GetTickCount(); cout<<i<<" : "<<dw2-dw1<<endl; of<<i<<" : "<<dw2-dw1<<endl; total+=dw2-dw1; } cout<<"总消耗:"<<total<<endl; of<<"总消耗:"<<total<<endl; cout<<"平均消耗:"<<float(total)/NUM1<<endl; of<<"平均消耗:"<<float(total)/NUM1<<endl; cout<<endl; of<<endl; i=0; total=0; cout<<"citer++测试:"<<endl; of<<"citer++测试:"<<endl; for(;i<NUM1;++i) { citer = ls.begin(); dw1 = ::GetTickCount(); while (citer!=ls.end()) { citer++; } dw2 = ::GetTickCount(); cout<<i<<" : "<<dw2-dw1<<endl; of<<i<<" : "<<dw2-dw1<<endl; total+=dw2-dw1; } cout<<"总消耗:"<<total<<endl; of<<"总消耗:"<<total<<endl; cout<<"平均消耗:"<<float(total)/NUM1<<endl; of<<"平均消耗:"<<float(total)/NUM1<<endl; cout<<endl; of<<endl; i=0; total=0; cout<<"++citer测试:"<<endl; of<<"++citer测试:"<<endl; for(;i<NUM1;++i) { citer = ls.begin(); dw1 = ::GetTickCount(); while (citer!=ls.end()) { ++citer; } dw2 = ::GetTickCount(); cout<<i<<" : "<<dw2-dw1<<endl; of<<i<<" : "<<dw2-dw1<<endl; total+=dw2-dw1; } cout<<"总消耗:"<<total<<endl; of<<"总消耗:"<<total<<endl; cout<<"平均消耗:"<<float(total)/NUM1<<endl; of<<"平均消耗:"<<float(total)/NUM1<<endl; cout<<endl; of<<endl;}
#define LOGFILE_PATH_A L"qin_nkl_23529303.etl" int main(){
string strFileName = _FNAME; string strTime = __TIME__; for(int k=0;k<strTime.length();++k) if(strTime[k]==':') strTime[k]='-'; strFileName+=strTime; strFileName+="_test1.txt"; //文件测试用 char sz[MAX_PATH]; sprintf(sz,"F:\\parse_%s_%d.txt",LOGFILE_PATH_A,GetTickCount()); cout<<sz<<endl; sprintf(sz,"F:\\parse_%S_%d.txt",LOGFILE_PATH_A,GetTickCount()); cout<<sz<<endl; cin.get(); return 0; //strFileName = sz; ofstream of(strFileName.c_str()); of<<GetTickCount()<<endl; of.flush(); of.close(); cin.get(); return 0; test1_int_i(of); test1_dword_i(of); test2_vec_type1(of); test2_vec_type2(of); test3_list_type1(of); test3_list_type2(of); test4_set_type1(of); test4_set_type2(of); test5_map_type1(of); test5_map_type2(of); cout<<"标记:"<<g_dwFlag<<endl; of.flush(); of.close(); cin.get(); return 0;}
vector/list/set/map 遍历耗时统计的更多相关文章
- map遍历的四种方式
原文 http://blog.csdn.net/dayanxuqun/article/details/26348277 以下是map遍历的四种方式: // 一.推荐只用value的时候用,都懂的... ...
- java map遍历方式及效率
本文转载自Java Map遍历方式的选择. 只给出遍历方式及结论.测试数据可以去原文看. 如果你使用HashMap 同时遍历key和value时,keySet与entrySet方法的性能差异取决于ke ...
- 分页查询和分页缓存查询,List<Map<String, Object>>遍历和Map遍历
分页查询 String sql = "返回所有符合条件记录的待分页SQL语句"; int start = (page - 1) * limit + 1; int end = pag ...
- springMVC Aspect AOP 接口耗时统计
在接口开发中,我们通常需要统计接口耗时,为后续接口性能做统计.在springMVC中可以用它的aop来记录日志. 1.在spring配置文件中开启AOP <!--*************** ...
- js中三个对数组操作的函数 indexOf()方法 filter筛选 forEach遍历 map遍历
indexOf()方法 indexOf()方法返回在该数组中第一个找到的元素位置,如果它不存在则返回-1. 不使用indexOf时 var arr = ['apple','orange','pea ...
- 原生JS forEach()和map()遍历的区别以及兼容写法
一.原生JS forEach()和map()遍历 共同点: 1.都是循环遍历数组中的每一项. 2.forEach() 和 map() 里面每一次执行匿名函数都支持3个参数:数组中的当前项item,当前 ...
- map遍历性能记录
map遍历可以通过keySet或者entrySet方式. 性能上:entrySet略胜一筹,原因是keySet获取到key后再根据key去获取value,在查一遍,所以慢一些. keySet: //先 ...
- forEach() 和 map() 遍历
1.forEach() 没有返回值. arr[].forEach(function(value,index,array){ //do something }) 参数:value数组中的当前项, i ...
- js的map遍历和array遍历
1. array遍历: [1].forEach() forEach是ES5中操作数组的一种方法,主要功能是遍历数组.forEach方法中的function回调有三个参数:第一个参数是遍历的数组内容,第 ...
随机推荐
- json语法和使用
一.JSON 概述: JavaScript Object Natation,是一种轻量级的数据交换技术规范. 二.使用流程: 在服务端将java对象转换为JSON,然后发送到浏览器,在浏览器上在讲JS ...
- HDU6312 Game(博弈,拿出本数与这个数的除数)
题意:A和B玩游戏 , 给出1 ~ n 的集合 ,每个人可以拿出一个数 , 这个数的除数也被拿出 , A先开始 , 没有数拿的人就输 , 问A赢不赢 分析:很有意思的一道题目 ///假设2 ~ n A ...
- v-model 用在组件中
官方文档: 使用自定义事件的表单输入组件 官方也说明了,v-model只不过是一个语法糖而已,真正的实现靠的还是 1. v-bind : 绑定响应式数据 2. 触发 input 事件 并传递数据 (核 ...
- Oracle子分区(sub partition)操作
要重新定义大量分区表. 首先看 SQL Reference 大致了解了 Oracle 的分区修改操作.Alter table 语句的alter_table_partitioning 子句可以分为以下几 ...
- linux 工具(1)------终端提示符配置
Linux环境变量,PS1用于设置终端的提示符. 设置规则 设置方法 设置规则 \d :代表日期,格式为 Weekday Month Date,例如 "Mon Aug 1" \H ...
- elasticsearch fitler查询例子
- 存储型xss调研
概念 存储型XSS,持久化,代码是存储在服务器中的,如在个人信息或发表文章等地方,加入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,用户访问该页面的时候触发代码执行. 常见的xss攻击方 ...
- [转] 微信小程序 页面跳转 传递参数
本文转自:http://blog.csdn.net/qq_31383345/article/details/52795212 微信小程序的页面跳转,页面之间传递参数笔记. CSDN微信小程序开发专栏, ...
- [转]ASP.NET MVC中的两个Action之间值的传递--TempData
本文转自:ASP.NET MVC中的两个Action之间值的传递--TempData 一. ASP.NET MVC中的TempData 在ASP.NET MVC框架的ControllerBase中存在 ...
- 1个示例 学会 mvc 常用标签
HtmlHelper用法大全3:Html.LabelFor.Html.EditorFor.Html.RadioButtonFor.Html.CheckBoxFor @Html.***For:为由指定 ...