Vector
vector<T>
es el único tipo de colección primitivo proporcionado por Move. A vector<T>
es una colección homogénea de T
's que puede crecer o reducirse empujando o sacando valores del "final".
Se puede crear una instancia de A vector<T>
con cualquier tipo T
. Por ejemplo, vector<u64>
, vector<address>
, vector<0x42::MyModule::MyResource>
y vector<vector<u8>>
son todos tipos de vectores válidos.
Literales
vector
Literales generales
Se pueden crear vectores de cualquier tipo con vector
literales.
Sintaxis | Tipo | Descripción |
|
| Un vector vacío |
|
| Un vector con |
En estos casos, el tipo de vector
se infiere, ya sea a partir del tipo de elemento o del uso del vector. Si no se puede inferir el tipo, o simplemente para mayor claridad, el tipo se puede especificar explícitamente:
Copiar
Ejemplo de literales vectoriales
Copiar
vector<u8>
literales
Un caso de uso común para los vectores en Move es representar "matrices de bytes", que se representan con vector<u8>
. Estos valores se utilizan a menudo con fines criptográficos, como una clave pública o un resultado hash. Estos valores son tan comunes que se proporciona una sintaxis específica para que los valores sean más legibles, en lugar de tener que usar vector[]
donde cada valor individual u8
se especifica en forma numérica.
Actualmente hay dos tipos de vector<u8>
literales admitidos: cadenas de bytes y cadenas hexadecimales .
Cadenas de bytes
Las cadenas de bytes son cadenas literales entre comillas con el prefijo a b
, por ejemplo b"Hello!\n"
.
Son cadenas codificadas en ASCII que permiten secuencias de escape. Actualmente, las secuencias de escape admitidas son:
Secuencia de escape | Descripción |
Nueva línea (o avance de línea) | |
Retorno de carro | |
Pestaña | |
| Barra invertida |
| Nulo |
| Cita |
| Escape hexadecimal, inserta la secuencia de bytes hexadecimales |
Cuerdas hexagonales
Las cadenas hexadecimales son cadenas literales entre comillas con el prefijo a x
, por ejemplo x"48656C6C6F210A"
.
Cada par de bytes, desde 00
hasta FF
, se interpreta como u8
un valor codificado en hexadecimal. Así, cada par de bytes corresponde a una única entrada en el archivo vector<u8>
.
Literales de cadena de ejemplo
Copiar
Operaciones
vector
proporciona varias operaciones a través del std::vector
módulo en la biblioteca estándar Move, como se muestra a continuación. Es posible que se agreguen más operaciones con el tiempo. El documento actualizado vector
se puede encontrar aquí .
Función | Descripción | ¿Aborta? |
| Crea un vector vacío que pueda almacenar valores de tipo. | Nunca |
| Retorna | Nunca |
| Crea un vector de tamaño 1 que contenga | Nunca |
| Devuelve la longitud del vector. | Nunca |
| Añadir | Nunca |
| Eliminar y devolver el último elemento en | si |
| Devuelve una referencia inmutable al | Si |
| Devolver una referencia mutable al | Si |
| Borrar | Si |
| Agregue los elementos | Nunca |
| Empuja todos los elementos del | Nunca |
| Devuelve verdadero si | Nunca |
| Intercambia los elementos en los índices | Si |
| Invierte el orden de los elementos en el vector | Nunca |
| Invierte el orden de los elementos [l, r) en el vector | Nunca |
| Devuelve | Nunca |
| Inserte un nuevo elemento | Si |
| Elimina el | Si |
| Intercambie el | Si |
| Recorta el vector |
|
| Recorta el vector |
|
| rotar (&mut [1, 2, 3, 4, 5], 2) -> [3, 4, 5, 1, 2] en su lugar, devuelve el punto de división, es decir. 3 en este ejemplo | Nunca |
| rotar un sector [izquierda, derecha) con izquierda <= rot <= derecha en su lugar, devuelve el punto de división | Nunca |
Ejemplo
Copiar
Destruir y copiar vector
s
vector
sAlgunos comportamientos vector<T>
dependen de las habilidades del tipo de elemento T
. Por ejemplo, los vectores que contienen elementos que no tienen drop
no se pueden descartar implícitamente como v
en el ejemplo anterior; deben destruirse explícitamente con vector::destroy_empty
.
Tenga en cuenta que vector::destroy_empty
abortará en tiempo de ejecución a menos que vec
contenga cero elementos:
Copiar
Pero no se produciría ningún error al eliminar un vector que contiene elementos con drop
:
Copiar
De manera similar, los vectores no se pueden copiar a menos que el tipo de elemento sea copy
. En otras palabras, a vector<T>
tiene copy
si y sólo si T
tiene copy
. Sin embargo, incluso los vectores copiables nunca se copian implícitamente:
Copiar
Las copias de vectores grandes pueden ser costosas, por lo que el compilador requiere explícitos copy
para que sea más fácil ver dónde están sucediendo.
Para obtener más detalles, consulte las secciones sobre habilidades de tipo y genéricos.
Propiedad
Como se mencionó anteriormente, vector
los valores se pueden copiar solo si los elementos se pueden copiar. En ese caso, la copia debe ser explícita mediante un copy
o una desreferencia *
.
Last updated