[/
    Copyright (c) 2019 Vinnie Falco (vinnie.falco@gmail.com)

    Distributed under the Boost Software License, Version 1.0. (See accompanying
    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

    Official repository: https://github.com/cppalliance/json
]

[/-----------------------------------------------------------------------------]

[section array]

A __value__ stores an instance of __array__ as the underlying representation
for a JSON array. Instances of the __array__ type function identically to
a __std_vector__ of __value__. Additionally:

* All values inserted into the container will use the same __storage_ptr__
  as the container itself.

An empty array may be constructed without incurring any memory allocations
using the default memory resource. A __storage_ptr__ can also be explicitly specified:

[snippet_arrays_1]

Initializer lists can be used to construct objects with initial
contents. These constructors may allocate memory and throw:

[snippet_arrays_2]

Alternatively, elements may be inserted after construction:

[snippet_arrays_3]

Similar to its standard library counterpart, elements may be accessed directly
by their 0-based index with bounds checking using
[link json.ref.boost__json__array.at.overload1 `at`],
or without bounds checking using
[link json.ref.boost__json__array.operator_lb__rb_ `operator[]`]:

[snippet_arrays_4]

For the complete listing of all available member functions and nested
types, see the reference page for __array__.

[heading Formatted Output]

When an __array__ is formatted to a __std_ostream__, the result is a valid
JSON. That is, the array will be output with square brackets and the comma
separated list of values, as per the JSON specification.

[endsect]
