vector與carray的效率差別直是太大了
對於兩者,我都沒有做其它特殊的設定,就是宣告變數,開始使用。我不知道它們分別是怎麼分配記憶體的,但我卻知道了它們之間的效率差別。
大概有380000條資料從資料庫中讀出來,用兩種方法寫到記憶體:vector和carray
vector就用push_back,carray就用add。carray用了大概15分鐘,而vector只用了大概35秒。這個差距今天才是第一次真正體驗到
第一次記錄,供以後自己參考
carray listdata;
vector listdata;
2020.3.9補充:
這大概是2、3年前的事了,所以只說明情況,具體的數字只是說明問題,而不算實際的資料。
很早之前(大約2023年)的時候寫了乙個檔案分析工具(一直用到今天,從開始到現在依然在維護更新中),每找到一條記錄就加入到乙個vector裡,同樣使用push_back()。
正常情況下,檔案都不會太大,最大很少會超過1gb,產生的記錄數量通常在10w以內,多了也就10+w。
這工具在使用過程中,有時候會遇到一些異常的檔案,最大的有20+gb,分析過程非常緩慢。後來為了查詢慢的問題,有次跟蹤了記錄分配的vector變數,檢視每次push_back()時的速度,發現了乙個過去沒有認真對待過的問題,就是剛開始時候,這個push_back()速度很快,但是當它裡面的記錄達到20+w時,特別是50+w之後,速度非常慢,超過100+w後,就要等很久很久了,後來對它進行了修改,每10w分成乙個組放在乙個vector中,所以當乙個檔案中有很多記錄時,就會有多個vector來存放,這樣修改之後,速度快多了。
從這裡可以看出,如果只是簡單地push_back(),那乙個vector盡量不要存太多的內容。
vector 與deque list 之間的區別
vector與deque之間的區別?vector deque 底層資料結構 動態陣列 動態開闢的二維陣列空間 前插入刪除元素時間複雜度 中間和末尾的刪插 都是o 1 o n o 1 對於記憶體的使用效率 需要連續的記憶體空間 可以分塊資料儲存,不需要連續的記憶體空間 在中間進行insert或者era...
MFC陣列類CArray的使用
mfc陣列類carray的使用的操作詳解 mfc的陣列類支援的陣列類似於常規陣列,可以存放任何資料型別。常規陣列在使用前必須將其定義成能夠容納所有可能需要的元素,即先確定大小,而 mfc陣列類建立的物件可以根據需要動態地增大或減小,陣列的起始下標是 0,而上限可以是固定的,也可以隨著元素的增加而增加...
vector與list的區別
vector與list差異點與優缺點 1 vector動態增長 不是隨著每個元素的插入而自己增長的。預先存了一些儲存區,使得實際分配的空間比當前所需的空間多一些,而list 表示非連續的記憶體區域,並通過一對指向首位元素的指標雙向鏈結起來,因而可以兩個方向進行遍歷。2 當從vector末端刪除元素的...