On Tue, 10 Jun 2014 23:28:16 -0400, Kapps <[email protected]> wrote:
On Wednesday, 11 June 2014 at 02:30:01 UTC, WhatMeWorry wrote:
In Mr. Cehreli's book it says
Additionally, the length of dynamic arrays can be changed by assigning
a value to this property:
int[] array; // initially empty
array.length = 5; // now has 5 elements
while in Mr. Alexandrescu's book, it says
To create a dynamic array, use a new expression (§ 2.3.6.1 on page 51)
as follows:
int[] array = new int[20]; // Create an array of 20 integers
Could someone please compare and contrast the two syntaxes. I presume
the "new" command places the 2nd array in heap memory.
They both do the same, create an array of n integers on the heap and set
the length to n. You can also use .capacity instead of .length to
allocate n but not adjust length.
This is slightly incorrect. Here is the difference as I see it:
1. Setting length goes through the extra steps of checking the current
length, looking up the existing block (obviously with initial value of
null, there isn't one), and allocating if necessary. A lot more code is
executed.
2. The 'new' call will ALWAYS allocate a new block, even if array
previously had data in it.
3. The block size allocated is not always n, it could be more.
4. You meant 'reserve', not 'capacity'. capacity checks how many elements
the block can support.
Which way is easier/better? If you know you are starting with a blank
array, then new is the way to go. This avoids any unnecessary extra checks
for existing data.
The second way is required if you may already have some data in the array
(i.e. prior to setting the length, arr.length != 0).
Also, I would recommend to use:
auto array = new int[20]
To avoid repeating the type.
-Steve