作者ric2k1 (Ric)
看板EE_DSnP
標題Re: [問題] ARRAY 的一些小疑問
時間Mon Dec 6 20:57:18 2010
※ 引述《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
1F:→ ckmarkoh:如果是erase第一個物件 若是把第一個位置給delete掉再把 12/07 22:35
2F:→ ckmarkoh:_data指到第二個物件 這樣做應該也可以吧 12/07 22:36
3F:→ ckmarkoh:而且執行起來也比較省時間 12/07 22:37
4F:→ wintercobra:不行吧...array的_data一開始new的時候就固定在那了, 12/07 22:45
5F:→ wintercobra:而且陣列的話_data的前一個記憶體不是會存他的大小給 12/07 22:45
6F:→ wintercobra:delete []_data的時候用嗎,_data指到別處會出問題的吧 12/07 22:46
7F:→ ric2k1:是的,上課有講,請勿隨便更動 _data pointer 的位置 12/07 23:30
8F:→ ckmarkoh:了解 所以就要把後面的都往前移一格.. 12/08 08:42
9F:推 BBSealion:那當我改變capacity而搬動array的時候 原先的要清掉嗎 12/08 10:42
10F:→ ric2k1:是的,原先的記憶體已經沒人在用,所以要還給系統 12/08 10:49