天天看點

C++動态數組再總結

動态數組是指在編譯時不能确定數組長度,程式在運作時需要動态配置設定記憶體空間的數組。

實作變長數組最簡單的是變長一維數組,你可以這樣做:

1

2

3

4

5

6

7

8

9

10

11

12

13

<code>//檔案名:array01.cpp</code>

<code>#include&lt;iostream&gt;</code>

<code>using namespace std;</code>

<code>int</code> <code>main(){</code>

<code>int</code> <code>len;</code>

<code>cin&gt;&gt;len;</code><code>//用指針p指向new動态配置設定的長度為len*sizeof(int)的記憶體空間</code>

<code>int</code><code>*p=</code><code>new</code> <code>int</code><code>[len]</code>

<code>;...........delete[]p;</code>

<code>return0;</code>

<code>}</code>

注意int*p=newint[len];這一句,你不能這樣做:int p[len];C++編譯器會報錯說len的大小不能确定,因為用這種形式聲明數組,數組的大小需要在編譯時确定。

而且這樣也不行:

int p[]=new int[len];

編譯器會說不能把int*型轉化為int[]型,因為用new開辟了一段記憶體空間後會傳回這段記憶體的首位址,是以要把這個位址賦給一個指針,是以要用int*p=new int[len];

array01.cpp實作了一個變長的一維數組,但是要養成一個好習慣,就是注意要登出指針p,使程式釋放用new開辟的記憶體空間。

當然使用C++标準模版庫(STL)中的vector(向量)也可以實作變長數組:

14

15

16

17

18

<code>//檔案名:array02.cpp</code>

<code>#include&lt;vector&gt;</code>

<code>int</code>  <code>len;</code>

<code>cin&gt;&gt;len;</code>

<code>vector&lt;</code><code>int</code><code>&gt;array(len);</code><code>//聲明變長數組</code>

<code>for</code><code>(</code><code>int</code> <code>i=</code><code>0</code><code>;i&lt;len;i++)</code>

<code>array[i]=i;</code>

<code>cout&lt;&lt;array[i]&lt;&lt;</code><code>"\t"</code><code>;</code>

19

20

21

<code>#include &lt;iostream&gt;</code>

<code>int</code> <code>main()</code>

<code>{</code>

<code> </code><code>int</code> <code>** arr;</code>

<code> </code><code>arr = </code><code>new</code> <code>int</code><code>* [</code><code>3</code><code>];</code>

<code> </code><code>for</code> <code>(</code><code>int</code> <code>k=</code><code>0</code><code>; k&lt;</code><code>3</code><code>; k++)</code>

<code> </code><code>{</code>

<code>  </code><code>arr[k] = </code><code>new</code> <code>int</code><code>;</code>

<code>  </code><code>cin&gt;&gt;*arr[k];  </code>

<code> </code><code>}</code>

<code>  </code><code>cout&lt;&lt;*arr[k]&lt;&lt;</code><code>" "</code><code>;</code>

<code> </code><code>cout&lt;&lt;endl;</code>

<code>  </code><code>delete arr[k];</code>

<code> </code><code>delete []arr;</code>

<code> </code><code>return</code> <code>0</code><code>;</code>

<code></code>

本文轉自朱先忠老師51CTO部落格,原文連結: http://blog.51cto.com/zhuxianzhong/1531776,如需轉載請自行聯系原作者

繼續閱讀