On Thursday, 30 July 2020 at 15:58:28 UTC, wjoe wrote:
I just stumbled upon code like this:

struct Foo(T)
{
    T[] b;

    this(int n)
    {
        b.reserve(n);
        b.length = n;
    }
}

.reserve looks redundant.

The docs are explaining .length nicely, however lack any specifics about reserve.

Here's a simple example to see that reserve and length serve different purposes. In particular, reserve doesn't fill any elements but allocates enough memory, while setting length puts values into the elements:

import std.stdio;

void main() {
        double[] x;
    writeln(x.length);
    writeln(x.capacity);
    x.reserve(50);
    writeln(x.length);
    writeln(x.capacity);
    x ~= 1.5;
    writeln(x);

    double[] y;
    y.length = 50;
    writeln(y.length);
    writeln(y.capacity);
    y ~= 1.5;
    writeln(y);
}

https://run.dlang.io/is/1EWf5R

Reply via email to