看板 EE_DSnP 關於我們 聯絡資訊
※ 引述《BBSealion (海獅)》之銘言: : 在做array的時候有些疑問 : 1. : 我們做的list是仿造STL裡面的樣式然後稍作修改(insert方式不同和自動排序) : 所以很好懂他應該要有甚麼樣的功能 : 但array呢?,也是仿造某個原有的功能嗎? : 他似乎不像vector(vector沒有pop_front) : 也不像一般的string a[5],造出來的array 其實除了 data always sorted, 而且 push_back()/push_front() 不能支援之外, 大部分的定義跟像是 STL 的 vector 是很像的。 : 2. : 所以看解說是說我的array在pop_front物件的時候 : 其餘物件要全部往前面移動 : (也就是a[1]會變成原先pop前的a[2]?) 是的。 : 但如果是erase其中一個物件 : 要把那個位置空下來嗎? (一般array會空下來吧?) : 還是也要把後面的往前順移呢? : 那如果是erase第一個物件呢? 要把 position 之後的所有物件往前移一格。 所以 erase 第一個物件與 pop_front() 的意思是一樣的。 : 3. : 在constructor解說中說到For data deletions, the _capacity will remain unchanged : clear中也提到DO NOT release its memory : 也就是說即使我下了reset的指令 : array的capacity也不會有所變動嗎? : 這樣不會有點奇怪麼,好像有東西沒有reset到 在 STL 裏頭的確也是這樣,clear() 並不會 release memory. FYI, 如果你要把一個 STL 的 vector clear 而且 release 它的 memory, 你必須 (calling "myClear(arr)"): template <class T> void myClear(vector<T>& arr) { vector<T> tmp; arr.swap(tmp); } 或是 (for general container classes): template <class C, class T> void myClear(C<T>& c) { C<T>& tmp; c.swap(tmp); } : ------ : 感謝~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.36.55.223
ckmarkoh:如果是erase第一個物件 若是把第一個位置給delete掉再把 12/07 22:35
ckmarkoh:_data指到第二個物件 這樣做應該也可以吧 12/07 22:36
ckmarkoh:而且執行起來也比較省時間 12/07 22:37
wintercobra:不行吧...array的_data一開始new的時候就固定在那了, 12/07 22:45
wintercobra:而且陣列的話_data的前一個記憶體不是會存他的大小給 12/07 22:45
wintercobra:delete []_data的時候用嗎,_data指到別處會出問題的吧 12/07 22:46
ric2k1:是的,上課有講,請勿隨便更動 _data pointer 的位置 12/07 23:30
ckmarkoh:了解 所以就要把後面的都往前移一格.. 12/08 08:42
BBSealion:那當我改變capacity而搬動array的時候 原先的要清掉嗎 12/08 10:42
ric2k1:是的,原先的記憶體已經沒人在用,所以要還給系統 12/08 10:49