線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:3158
推到 Plurk!
推到 Facebook!

請問如何刪除vector的值

答題得分者是:pwipwi
shao0914
一般會員


發表:9
回覆:5
積分:2
註冊:2003-12-17

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-05-14 16:42:04 IP:140.115.xxx.xxx 未訂閱
各位前輩好:

小弟目前所遇到的問題在於如何刪除用vector所宣告的結構,
因為我是把用vector所宣告的結構寫在DLL中,
而我想在執行完DLL部份後,就直接把vector所宣告的東西刪除,
而不是在程式關閉的時後才刪除。

爬文後,是有看到clear()這個指令,但好像不符合我的要求。
所以想請問各位前輩有什麼比較好的方式?

謝謝
shao0914
一般會員


發表:9
回覆:5
積分:2
註冊:2003-12-17

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-05-23 10:06:46 IP:140.115.xxx.xxx 未訂閱
容小弟自問自答吧

小弟在網路上找尋相關資料後,尋得一個辦法。
即利用空的vector去swap,這樣即可釋放記憶體

例:vector<所要清空之vector形態>().swap(欲清空之vector名稱)

但小弟不懂的地方是,為什麼利用一個空的vector即可以釋放舊有的vector?
這個不是又多了一個vector嗎?

關於這個問題,有前輩可以替我解答的嗎?謝謝
pwipwi
版主


發表:68
回覆:629
積分:349
註冊:2004-04-08

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-07-01 01:55:07 IP:118.168.xxx.xxx 訂閱
vector的clear和swap法釋放是不同的清除概念
基本上vector作完clear後雖然他的size是0,但是他的capacity在使用後不會是0...
意思是,clear並不會釋放記憶體。

但是swap法不同,
他把vector的內部記憶體和另一個local的vector記憶體互換,
經由local object的release,可以達到釋放記憶體的需求。

總歸來說,如果一個vector只是要清除element,之後還可能會再重新加入新的element
clear是首選,這樣才能減少reallocation的時間。

但是如果一個vector不只要清除element,還要釋放memory block,
就使用swap法,不然memory block還是會存在。

===================引 用 shao0914 文 章===================
容小弟自問自答吧

小弟在網路上找尋相關資料後,尋得一個辦法。
即利用空的vector去swap,這樣即可釋放記憶體

例:vector<所要清空之vector形態>().swap(欲清空之vector名稱)

但小弟不懂的地方是,為什麼利用一個空的vector即可以釋放舊有的vector?
這個不是又多了一個vector嗎?

關於這個問題,有前輩可以替我解答的嗎?謝謝
shao0914
一般會員


發表:9
回覆:5
積分:2
註冊:2003-12-17

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-07-15 16:17:28 IP:140.115.xxx.xxx 未訂閱
抱歉!
現在才回,實在感謝板主的回應。
替小弟解答了心中疑惑。
再次感謝。

系統時間:2024-11-22 19:39:44
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!