作者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