Dia 5 - Deque vs. Vector vs. Array

Matheus Gomes - Oct 3 - - Dev Community

Enquanto estava construindo o objeto "snake" que é referente ao protagonista do meu jogo. Tive contato com uma estrutura de dados que ainda não havia ouvido falar: deque.

Quando usar deque?
É usado quando precisamos de inserção ou remoção eficiente no inicio ou no fim da sequência. E reparando, isso faz sentido para o contexto da snake, tendo em vista que o protagonista irá crescer conforme se alimenta no jogo. Porém, essa é a melhor opção? Vamos dar uma olhada em outras estruturas que já ouvi falar:

O que é array?
É uma estrutura fixa, o seu tamanho não pode ser alterado e é conhecido em tempo de compilação. É o mais eficiente em questão de desempenho, mas não pode remover ou adicionar mais itens. Podemos chegar a conclusão que pro contexto que estamos buscando não é o ideal.

E o vector?
Esse é bastante semelhante ao deque. É usado quando precisamos de dinamicidade, porém a remoção ou inserção só acontece no final. Então, talvez seja essa a melhor escolha pro nosso protagonista, tendo em vista que sempre que se alimentar, irá crescer no final. PORÉM! E quando a snake tem que se mover? Uma boa ideia seria remover o item do final, e lança-lo ao inicio, dando sensação de movimento.

Por enquanto minha classe está assim:

#ifndef SNAKE_H
#define SNAKE_H

#include "raylib.h"
#include <deque>

class Snake {
public:
    std::deque<Vector2> body = { Vector2{6,9}, Vector2{5,9}, Vector2{4,9} };
    void Draw();
};

#endif
Enter fullscreen mode Exit fullscreen mode

Irei ponderar essa questão de utilizar vector ou deque.

Exemplos de uso de vector, deque e array:

#include <vector>
std::vector<int> vec = {1, 2, 3};
vec.push_back(4);  // Adiciona no final
Enter fullscreen mode Exit fullscreen mode
#include <deque>
std::deque<int> dq = {1, 2, 3};
dq.push_front(0);  // Adiciona no início
dq.push_back(4);   // Adiciona no final
Enter fullscreen mode Exit fullscreen mode
int arr[3] = {1, 2, 3};  // Tamanho fixo
arr[0] = 0;  // Modifica o primeiro elemento
Enter fullscreen mode Exit fullscreen mode

Há outras estruturas como: list, set, map e etc... Mas atendem propósitos distintos, e não entrarei nesses méritos por enquanto.

Curiosidade

Vocês sabiam que se pesquisar snake no Google, aparece um jogo super bem feito e com desafios diários bem interessantes? Achei bem legal 😄.

. . . . . . . . . . . . . . . . . . . . . .