Module 0x1::vector
A variable-sized container that can hold any type. Indexing is 0-based, and vectors are growable. This module has many native functions.
- Constants
- Function
empty
- Function
length
- Function
borrow
- Function
push_back
- Function
borrow_mut
- Function
pop_back
- Function
destroy_empty
- Function
swap
- Function
singleton
- Function
reverse
- Function
append
- Function
is_empty
- Function
contains
- Function
index_of
- Function
remove
- Function
insert
- Function
swap_remove
Constants
The index into the vector is out of bounds
const EINDEX_OUT_OF_BOUNDS: u64 = 131072;
Function empty
Create an empty vector.
Function length
Return the length of the vector.
Function borrow
Acquire an immutable reference to the i
th element of the vector v
.
Aborts if i
is out of bounds.
public fun borrow<Element>(v: &vector<Element>, i: u64): &Element
Function push_back
Add element e
to the end of the vector v
.
public fun push_back<Element>(v: &mut vector<Element>, e: Element)
Function borrow_mut
Return a mutable reference to the i
th element in the vector v
.
Aborts if i
is out of bounds.
public fun borrow_mut<Element>(v: &mut vector<Element>, i: u64): &mut Element
Implementation
public native fun borrow_mut<Element>(v: &mut vector<Element>, i: u64): &mut Element;
Function pop_back
Pop an element from the end of vector v
.
Aborts if v
is empty.
public fun pop_back<Element>(v: &mut vector<Element>): Element
Function destroy_empty
Destroy the vector v
.
Aborts if v
is not empty.
public fun destroy_empty<Element>(v: vector<Element>)
Implementation
public native fun destroy_empty<Element>(v: vector<Element>);
Function swap
Swaps the elements at the i
th and j
th indices in the vector v
.
Aborts if i
or j
is out of bounds.
public fun swap<Element>(v: &mut vector<Element>, i: u64, j: u64)
Function singleton
Return an vector of size one containing element e
.
Implementation
Function reverse
Reverses the order of the elements in the vector v
in place.
Implementation
Function append
Pushes all of the elements of the other
vector into the lhs
vector.
public fun append<Element>(lhs: &mut vector<Element>, other: vector<Element>)
Implementation
Function is_empty
Return true
if the vector v
has no elements and false
otherwise.
Function contains
Return true if e
is in the vector v
.
Otherwise, returns false.
public fun contains<Element>(v: &vector<Element>, e: &Element): bool
Implementation
Function index_of
Return (true, i)
if e
is in the vector v
at index i
.
Otherwise, returns (false, 0)
.
public fun index_of<Element>(v: &vector<Element>, e: &Element): (bool, u64)
Implementation
Function remove
Remove the i
th element of the vector v
, shifting all subsequent elements.
This is O(n) and preserves ordering of elements in the vector.
Aborts if i
is out of bounds.
public fun remove<Element>(v: &mut vector<Element>, i: u64): Element
Implementation
Function insert
Insert e
at position i
in the vector v
.
If i
is in bounds, this shifts the old v[i]
and all subsequent elements to the right.
If i == v.length()
, this adds e
to the end of the vector.
This is O(n) and preserves ordering of elements in the vector.
Aborts if i > v.length()
public fun insert<Element>(v: &mut vector<Element>, e: Element, i: u64)
Implementation
Function swap_remove
Swap the i
th element of the vector v
with the last element and then pop the vector.
This is O(1), but does not preserve ordering of elements in the vector.
Aborts if i
is out of bounds.
public fun swap_remove<Element>(v: &mut vector<Element>, i: u64): Element
Implementation
public fun swap_remove<Element>(v: &mut vector<Element>, i: u64): Element {
assert!(!v.is_empty(), EINDEX_OUT_OF_BOUNDS);
let last_idx = v.length() - 1;
v.swap(i, last_idx);
v.pop_back()
}