Sobes.tech
Junior — Middle

Quais algoritmos são utilizados na remoção de um elemento de std::vector e qual a complexidade temporal que isso implica?

sobes.tech IA

Resposta da IA

Ao remover um elemento de std::vector, é utilizado um algoritmo que desloca todos os elementos seguintes ao elemento removido uma posição para a esquerda para preencher o espaço vazio. Isto deve-se ao fato de que std::vector armazena os elementos num bloco de memória contíguo.

A complexidade temporal de remover um elemento depende da sua posição:

  • Se o último elemento for removido, a operação é realizada em O(1), pois o tamanho do vetor é simplesmente reduzido.
  • Se um elemento no meio ou no início for removido, todos os elementos seguintes são deslocados, o que dá um pior caso de O(n), onde n é a quantidade de elementos após o removido.

Exemplo de remoção de um elemento por índice:

#include <vector>
#include <iostream>

int main() {
    std::vector<int> v = {1, 2, 3, 4, 5};
    int index_to_remove = 2; // remover o elemento com valor 3

    v.erase(v.begin() + index_to_remove);

    for (int x : v) {
        std::cout << x << ' ';
    }
    // Saída: 1 2 4 5
}