[問題] 搜尋vector

看板C_and_CPP作者 (wei chih)時間13年前 (2011/11/15 21:16), 編輯推噓4(406)
留言10則, 6人參與, 最新討論串1/2 (看更多)
各位好, 最近寫程式時遇到下面一個奇怪的問題, 我寫了一個迴圈, 每次都會在vector中加入一個string, vec.push_back(key); 接著搜尋此vector中不存在的一個string, find(vec.begin(), vec.end(), "aaa"); // aaa並不在vector中 我會記錄 push_back 和 find 的執行時間, 照理來說執行時間會呈線性分佈 (除了resize之外), 但是我發現當我加到大約500筆資料的時候他的執行時間會突然往下掉, 接著再呈線性增加, 我不能理解為何會突然執行時間就變少了呢 還請各位不吝提供一些想法 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 78.105.79.7

11/16 08:41, , 1F
你可以去看看vector的實作
11/16 08:41, 1F

11/16 08:44, , 2F
空間不足重新配置的消耗...
11/16 08:44, 2F

11/16 08:44, , 3F
侯傑的書有講,不需要花時間看實作的部分...
11/16 08:44, 3F

11/16 13:13, , 4F
我蠻好奇的,能不能測一下時間是花在push_back or find?
11/16 13:13, 4F

11/16 13:25, , 5F
查一下dynamic array
11/16 13:25, 5F

11/16 17:04, , 6F
find()也會這樣嗎?...f@_@
11/16 17:04, 6F

11/16 19:25, , 7F
想不透,原po能不能po一下完整的程式碼?
11/16 19:25, 7F

11/16 20:12, , 8F
有預分配加上撞上cache吧所以心情好變快了
11/16 20:12, 8F

11/16 21:33, , 9F
空間不夠就會重新分配,你如果預先知道所需大小
11/16 21:33, 9F

11/16 21:33, , 10F
可以先resize
11/16 21:33, 10F
文章代碼(AID): #1EmjQpkC (C_and_CPP)
討論串 (同標題文章)
以下文章回應了本文
問題
0
4
完整討論串 (本文為第 1 之 2 篇):
問題
0
4
問題
4
10
文章代碼(AID): #1EmjQpkC (C_and_CPP)