Existe algum método pop_front em C ++ std :: Vector?
Não é a resposta rápida para esta consulta. Os vetores não possuem um método Pop_front embutido na biblioteca padrão C ++, ao contrário de outras classes de contêineres como Deque e List. O princípio do design fundamental dos vetores, que promove um rápido acesso aleatório aos elementos, é a causa dessa ausência. A remoção do primeiro elemento exige uma mudança de todos os componentes seguintes, já que os vetores armazenam seus elementos em um bloco de memória contíguo.
É essencial olhar para pop_back Para entender o porquê pop_front não está disponível em std :: vetor. Um método vetorial comum chamado pop_back elimina o componente final do contêiner. Isso é realizado executando o destruidor do membro que foi removido e diminuindo o tamanho do vetor por um. À medida que os vetores se expandem de suas costas, a eliminação do componente final é uma operação simples que não envolve a realocação de outros elementos. No entanto, a eliminação do elemento inicial faria com que todos os componentes subseqüentes movessem um espaço para a esquerda. Como este procedimento copia todos os elementos vetoriais, é incrivelmente ineficiente, especialmente para grandes vetores. O pop_front é, portanto, excluído de STD :: Vector para impedir que as operações vetoriais sejam lentas.
Alternativas do método pop_front em c++
Existem inúmeras maneiras de remover componentes da frente de um vetor, apesar da falta de um pop_front método.
1: Método de apagar
Uma técnica é utilizar o Método Apagar no elemento inicial do vetor. O Método Apagar modifica os componentes restantes para refletir a remoção de um elemento ou conjunto de itens do vetor. Assim, podemos usar a seguinte linha de código em C ++ para alcançar o mesmo comportamento que pop_front:
#incluir
#incluir
modelo
void pop_front (std :: vetor& v)
if (v.tamanho ()> 0)
v.Apagar (v.começar());
int main ()
std :: vetornums = 5,6,7,8,9;
pop_front (nums);
para (int i: nums)
std :: cout << i << ";
retornar 0;
No código acima, estamos usando o apagar() função como uma alternativa de pop_front () Para remover o primeiro elemento de um vetor inicializado. Nós definimos uma função chamada pop_front (), E na função, estamos usando o começar() e apagar() funções para remover o primeiro elemento do vetor.
Saída
2: Método Deque
Outro recipiente na biblioteca padrão C ++ é o deque, que oferece a capacidade de um recipiente de matriz dinâmica com a capacidade adicional de adicionar e remover elementos da frente e do traseiro. Usando um Deque (fila de ponta dupla) no lugar de um vetor é um substituto adicional para pop_front. Portanto, podemos usá -lo para alcançar o mesmo comportamento que pop_front:
#incluir
#incluir
usando namespace std;
int main ()
dequemydeque;
mydeque.push_front (4);
mydeque.push_front (5);
mydeque.push_front (6);
mydeque.pop_front ();
para (automotivo = mydeque.começar(); isto != mydeque.fim(); ++ it)
cout << " << *it;
No código acima, estamos usando um push_front () função para empurrar os valores em um deque e um pop_front () função para remover o primeiro elemento do deque.
Saída
Conclusão
Devido à sua estrutura de memória interna e princípios de design, std :: vetor em C ++ não tem um pop_front método. Existem, no entanto, várias técnicas adicionais, como o uso de deque e apagar métodos que podem ser usados para remover elementos da frente do recipiente. Ao selecionar a melhor abordagem para sua implementação, os programadores devem comprometer entre conveniência e eficiência.