鏈枃妗f繁鍏ュ垎鏋愪簡std::deque錛屽茍鎻愪緵浜嗕竴涓寚瀵兼濇兂錛氬綋鑰冭檻鍒板唴瀛樺垎閰嶅拰鎵ц鎬ц兘鐨勬椂鍊欙紝浣跨敤std::deque瑕佹瘮std::vector濂姐?br>
鍑芥暟 |
鎻忚堪 |
c.assign(beg,end) c.assign(n,elem) |
灝哰beg; end)鍖洪棿涓殑鏁版嵁璧嬪肩粰c銆?br>灝唍涓猠lem鐨勬嫹璐濊祴鍊肩粰c銆?/td> |
c.at(idx) |
浼犲洖绱㈠紩idx鎵鎸囩殑鏁版嵁錛屽鏋渋dx瓚婄晫錛屾姏鍑簅ut_of_range銆?/td> |
c.back() |
浼犲洖鏈鍚庝竴涓暟鎹紝涓嶆鏌ヨ繖涓暟鎹槸鍚﹀瓨鍦ㄣ?/td> |
c.begin() |
浼犲洖榪唬鍣ㄩ噸鐨勫彲涓涓暟鎹?/td> |
c.clear() |
縐婚櫎瀹瑰櫒涓墍鏈夋暟鎹?/td> |
deque<Elem> c deque<Elem> c1(c2) Deque<Elem> c(n) Deque<Elem> c(n, elem) Deque<Elem> c(beg,end) c.~deque<Elem>() |
鍒涘緩涓涓┖鐨刣eque銆?br>澶嶅埗涓涓猟eque銆?br>鍒涘緩涓涓猟eque錛屽惈鏈塶涓暟鎹紝鏁版嵁鍧囧凡緙虹渷鏋勯犱駭鐢熴?br>鍒涘緩涓涓惈鏈塶涓猠lem鎷瘋礉鐨刣eque銆?br>鍒涘緩涓涓互[beg;end)鍖洪棿鐨刣eque銆?br>閿姣佹墍鏈夋暟鎹紝閲婃斁鍐呭瓨銆?/td> |
c.empty() |
鍒ゆ柇瀹瑰櫒鏄惁涓虹┖銆?/td> |
c.end() |
鎸囧悜榪唬鍣ㄤ腑鐨勬渶鍚庝竴涓暟鎹湴鍧銆?/td> |
c.erase(pos) c.erase(beg,end) |
鍒犻櫎pos浣嶇疆鐨勬暟鎹紝浼犲洖涓嬩竴涓暟鎹殑浣嶇疆銆?br>鍒犻櫎[beg,end)鍖洪棿鐨勬暟鎹紝浼犲洖涓嬩竴涓暟鎹殑浣嶇疆銆?/td> |
c.front() |
浼犲洖鍦頒竴涓暟鎹?/td> |
get_allocator |
浣跨敤鏋勯犲嚱鏁拌繑鍥炰竴涓嫹璐濄?/td> |
c.insert(pos,elem) c.insert(pos,n,elem) c.insert(pos,beg,end) |
鍦╬os浣嶇疆鎻掑叆涓涓猠lem鎷瘋礉錛屼紶鍥炴柊鏁版嵁浣嶇疆銆?br>鍦╬os浣嶇疆鎻掑叆>n涓猠lem鏁版嵁銆傛棤榪斿洖鍊箋?br>鍦╬os浣嶇疆鎻掑叆鍦╗beg,end)鍖洪棿鐨勬暟鎹傛棤榪斿洖鍊箋?/td> |
c.max_size() |
榪斿洖瀹瑰櫒涓渶澶ф暟鎹殑鏁伴噺銆?/td> |
c.pop_back() |
鍒犻櫎鏈鍚庝竴涓暟鎹?/td> |
c.pop_front() |
鍒犻櫎澶撮儴鏁版嵁銆?/td> |
c.push_back(elem) |
鍦ㄥ熬閮ㄥ姞鍏ヤ竴涓暟鎹?/td> |
c.push_front(elem) |
鍦ㄥご閮ㄦ彃鍏ヤ竴涓暟鎹?/td> |
c.rbegin() |
浼犲洖涓涓嗗悜闃熷垪鐨勭涓涓暟鎹?/td> |
c.rend() |
浼犲洖涓涓嗗悜闃熷垪鐨勬渶鍚庝竴涓暟鎹殑涓嬩竴涓綅緗?/td> |
c.resize(num) |
閲嶆柊鎸囧畾闃熷垪鐨勯暱搴︺?/td> |
c.size() |
榪斿洖瀹瑰櫒涓疄闄呮暟鎹殑涓暟銆?/td> |
C1.swap(c2) Swap(c1,c2) |
灝哻1鍜宑2鍏冪礌浜掓崲銆?br>鍚屼笂鎿嶄綔銆?/td> |
鍑芥暟 |
鎻忚堪 |
operator[] |
榪斿洖瀹瑰櫒涓寚瀹氫綅緗殑涓涓紩鐢ㄣ?/td> |
#include <deque> #include <fstream> #include <string> #include <vector> static enum modes { 銆FM_INVALID = 0, 銆FM_VECTOR, 銆FM_DEQUE }; class CVectorDequeTest { 銆public: 銆銆CVectorDequeTest(); 銆銆void ReadTestFile(const char* szFile, int iMode) 銆銆{ 銆銆銆char buff[0xFFFF] = {0}; 銆銆銆std::ifstream inFile; 銆銆銆inFile.open(szFile); 銆銆銆while(!inFile.eof()) 銆銆銆{ 銆銆銆銆inFile.getline(buff, sizeof(buff)); 銆銆銆銆if(iMode == FM_VECTOR) 銆銆銆銆銆m_vData.push_back(buff); 銆銆銆銆else if(iMode == FM_DEQUE) 銆銆銆銆銆m_dData.push_back(buff); 銆銆銆} 銆銆銆inFile.close(); 銆銆} 銆銆virtual ~CVectorDequeTest(); 銆protected: 銆銆std::vector<std::string> m_vData; 銆銆std::deque<std::string> m_dData; }; |
CPU | 1.8 GHz Pentium 4 |
鍐呭瓨 | 1.50 GB |
鎿嶄綔緋葷粺 | W2K-SP4 |
鏂囦歡涓殑琛屾暟 | 9874 |
騫沖潎姣忚瀛楁瘝涓暟 |
1755.85 |
璇繪枃浠剁殑嬈℃暟 |
45 |
鎬誨叡鎻掑叆鐨勬暟鎹釜鏁?/td> | 444330 |
![]() |
![]() |
![]() |
瀹為獙浜屸斺?vector::reserve()鐨勮祫婧?/strong>
m_vData.reserve(1000000); |
CPU |
1.8 GHz Pentium 4 |
鍐呭瓨 |
1.50 GB |
鎿嶄綔緋葷粺 |
W2K-SP4 |
鏂囦歡涓殑琛屾暟 |
9874 |
騫沖潎姣忚瀛楁瘝涓暟 |
1755.85 |
璇繪枃浠剁殑嬈℃暟 |
70 |
鎬誨叡鎻掑叆鐨勬暟鎹釜鏁?br> | 691180 |
![]() |
![]() |
![]() |
Vector |
Deque |
||||||||||||||||||||
|
|
for(xRun=0; xRun<NUMBER_OF_XRUNS; xRun++) { 銆df = new CVectorDequeTest; 銆elapsed_time = 0; 銆for(i=0; i<NUMBER_OF_RUNS*xRun; i++) 銆{ 銆銆cout << "Deque - Run " << i << " of " << 銆銆NUMBER_OF_RUNS*xRun << "... "; 銆銆df->ReadTestFile("F:\\huge.csv",DF_DEQUE); 銆銆deque_data.push_back(datapoint()); 銆銆deque_data.back().time_to_read = df->GetProcessTime(); 銆銆elapsed_time += deque_data.back().time_to_read; 銆銆deque_data.back().elapsed_time = elapsed_time; 銆銆cout << deque_data.back().time_to_read << " seconds\n"; 銆} 銆vnElements.push_back(df->GetDequeSize()); 銆cout << "\n\nDeleting... "; 銆del_deque.Start(); 銆delete df; 銆del_deque.Stop(); 銆cout << del_deque.GetDuration()/1000000.0 << " seconds.\n\n"; 銆vTimeToDelete.push_back(del_deque.GetDuration()/1000000.0); } |
![]() |
deque Results |
|
Mean |
0.007089269 sec |
Maximum |
11.02838496 sec |
Minimum |
-15.25901667 sec |
Std. Dev |
3.3803636 sec |
6-Sigma |
20.2821816 sec |
![]() |
vector Results |
|
Mean |
-0.007122715sec |
Maximum |
0.283452127 sec |
Minimum |
-0.26724459sec |
Std. Dev |
0.144572356sec |
6-Sigma |
0.867434136sec |
![]() |
![]() |
|
|
||||||||||||||||||||||
|
|