Vector
vector<T>
is the only primitive collection type provided by Move. A vector<T>
is a homogenous collection of T
's that can grow or shrink by pushing/popping values off the "end".
A vector<T>
can be instantiated with any type T
. For example, vector<u64>
, vector<address>
, vector<0x42::MyModule::MyResource>
, and vector<vector<u8>>
are all valid vector types.
General vector
literals:
Vectors of any type can be created with vector
literals.
vector[]
An empty vector
vector[e1, ..., en]
vector[e1, ..., en]: vector<T>
where e_i: T
s.t. 0 < i <= n
and n > 0
A vector with n
elements (of length n
)
In these cases, the type of the vector
is inferred, either from the element type or from the vector's usage. If the type cannot be inferred, or simply for added clarity, the type can be specified explicitly:
Example vector literals
Vector<u8>
literal
vector<u8>
literals are used to represent byte and hex strings in move.
Up-to-date document on various operations on vector
can be found here.
Destroying and copying vectors
:
Some behaviors of vector<T>
depend on the abilities of the element type, T
. For example, vectors containing elements that do not have drop
cannot be implicitly discarded like v
in the example above--they must be explicitly destroyed with vector::destroy_empty
.
Note that vector::destroy_empty
will abort at runtime unless vec
contains zero elements:
But no error would occur for dropping a vector that contains elements with drop
:
Similarly, vectors cannot be copied unless the element type has copy
. In other words, a vector<T>
has copy
if and only if T
has copy
. However, even copyable vectors are never implicitly copied:
Copies of large vectors can be expensive, so the compiler requires explicit copy
's to make it easier to see where they are happening.
Last updated