www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Dynamic array of strings and appending a zero length array

reply Cecil Ward <cecil cecilward.com> writes:
I have a dynamic array of dstrings and I’m spending dstrings to 
it. At one point I need to append a zero-length string just to 
increase the length of the array by one but I can’t have a slot 
containing garbage. I thought about ++arr.length - would that 
work, while giving me valid contents to the final slot ?

What I first did was
    arr ~= [];

This gave no errors but it doesn’t increase the array length, so 
it seems. Is that a bug ? Or is it supposed to do that?

Then I tried
     arr ~= ""d;
and that did work. Is there anything more efficient that I could 
do instead?

I actually have an alias for the type of the strings so that they 
can be either dstrings or wstrings with just a recompilation. How 
should I then generate a zero-length string that has th correct 
type of dstring or wstring as I am stuck with the ‘d’-suffix on 
the end of the ""d at the moment. Can I just cast ? Not a 
reinterpret cast, but a proper value conversion?
Jul 08 2023
next sibling parent Cecil Ward <cecil cecilward.com> writes:
On Saturday, 8 July 2023 at 17:15:26 UTC, Cecil Ward wrote:
 I have a dynamic array of dstrings and I’m spending dstrings to 
 it. At one point I need to append a zero-length string just to 
 increase the length of the array by one but I can’t have a slot 
 containing garbage. I thought about ++arr.length - would that 
 work, while giving me valid contents to the final slot ?

 [...]
s/spending/appending/
Jul 08 2023
prev sibling next sibling parent FeepingCreature <feepingcreature gmail.com> writes:
On Saturday, 8 July 2023 at 17:15:26 UTC, Cecil Ward wrote:
 I have a dynamic array of dstrings and I’m spending dstrings to 
 it. At one point I need to append a zero-length string just to 
 increase the length of the array by one but I can’t have a slot 
 containing garbage. I thought about ++arr.length - would that 
 work, while giving me valid contents to the final slot ?

 What I first did was
    arr ~= [];

 This gave no errors but it doesn’t increase the array length, 
 so it seems. Is that a bug ? Or is it supposed to do that?
You can append an element to an array. You can also append an array to an array. Because [] can be an array of any type, the compiler guesses that it's an empty `string[]` array and appends it to no effect.
Jul 08 2023
prev sibling parent reply "H. S. Teoh" <hsteoh qfbox.info> writes:
On Sat, Jul 08, 2023 at 05:15:26PM +0000, Cecil Ward via Digitalmars-d-learn
wrote:
 I have a dynamic array of dstrings and I’m spending dstrings to it. At
 one point I need to append a zero-length string just to increase the
 length of the array by one but I can’t have a slot containing garbage.
 I thought about ++arr.length - would that work, while giving me valid
 contents to the final slot ?
Unlike C/C++, the D runtime always ensures that things are initialized unless you explicitly tell it not to (via void-initialization). So ++arr.length will work; the new element will be initialized to dstring.init (which is the empty string). T -- If Java had true garbage collection, most programs would delete themselves upon execution. -- Robert Sewell
Jul 08 2023
parent Cecil Ward <cecil cecilward.com> writes:
On Saturday, 8 July 2023 at 20:01:08 UTC, H. S. Teoh wrote:
 On Sat, Jul 08, 2023 at 05:15:26PM +0000, Cecil Ward via 
 Digitalmars-d-learn wrote:
 I have a dynamic array of dstrings and I’m spending dstrings 
 to it. At one point I need to append a zero-length string just 
 to increase the length of the array by one but I can’t have a 
 slot containing garbage. I thought about ++arr.length - would 
 that work, while giving me valid contents to the final slot ?
Unlike C/C++, the D runtime always ensures that things are initialized unless you explicitly tell it not to (via void-initialization). So ++arr.length will work; the new element will be initialized to dstring.init (which is the empty string). T
Many thanks, it might give me a slightly better result just doing ++arr.length;
Jul 09 2023