Capítulo 05: Vetores (Vec) 🦸♂️🛡️
Neste capítulo, vamos aprender a armazenar vários valores em uma única variável usando os Vetores dinâmicos do Rust, com o tema Os Vingadores (Marvel)!
📖 O que são Vetores em Rust?
No Rust, temos os arrays normais (com tamanho fixo) e os Vec (vetores dinâmicos). O Vec permite adicionar e remover itens à vontade, crescendo de tamanho automaticamente, igual ao std::vector do C++!
📖 Exemplo Guiado: Poder dos Vingadores
Vamos criar um vetor para armazenar o nível de poder de 4 Vingadores e calcular a média de poder da equipe.
- Crie o arquivo
poder_equipe.rsna pastasrc/:
fn main() {
// Criando um vetor dinâmico usando a macro vec!
let poderes = vec![85, 90, 95, 100];
let mut soma = 0;
// Acessando os itens pelo índice
println!("Poder do Homem de Ferro: {}", poderes[0]);
println!("Poder do Capitao America: {}", poderes[1]);
println!("Poder do Thor: {}", poderes[2]);
println!("Poder do Hulk: {}", poderes[3]);
// Calculando a média usando um laço for
for poder in &poderes {
soma += poder;
}
// Convertendo para float para calcular a média
let media = soma as f32 / poderes.len() as f32;
println!("\nMedia de poder da equipe: {:.2}", media);
}🕹️ Como Executar e Testar no VS Code
- Abra o terminal integrado.
- Compile:
rustc poder_equipe.rs - Execute:
./poder_equipe
Resultado Esperado:
Poder do Homem de Ferro: 85
Poder do Capitao America: 90
Poder do Thor: 95
Poder do Hulk: 100
Media de poder da equipe: 92.50📊 Ilustração Visual: Vetor na Memória
O Vec armazena os dados na memória Heap e pode crescer:
graph LR subgraph "Vetor: poderes" A["Índice 0: 85"] B["Índice 1: 90"] C["Índice 2: 95"] D["Índice 3: 100"] end
🛠️ Prática Obrigatória 1: Inventário de Itens
Crie um programa chamado inventario.rs que comece com um vetor vazio de strings. Adicione 3 itens ao inventário (ex: “Poção”, “Espada”, “Escudo”) usando o método .push() e depois exiba todos os itens usando um laço for.
🔑 Gabarito de Código
Prática 1: inventario.rs
fn main() {
// Precisamos de mut para adicionar itens!
let mut inventario = Vec::new();
inventario.push("Pocao");
inventario.push("Espada");
inventario.push("Escudo");
println!("--- Seu Inventario ---");
for item in &inventario {
println!("- {}", item);
}
}