Czy jest jakaś metoda pop_front w C ++ STDVector?

Czy jest jakaś metoda pop_front w C ++ STDVector?
Język programowania wysokiego poziomu o nazwie C ++ może obsługiwać szeroki zakres struktur danych, w tym wektory. Wektor to dynamiczna tablica sąsiednich elementów pamięci o z góry określonym maksymalnym rozmiarze. Jest to elastyczny i praktyczny pojemnik w C ++, który zapewnia skuteczne zarządzanie pamięcią i elastyczną alokacja. Jednym z często zadawanych pytań wśród programistów C ++ jest to, czy istnieje pop_front Metoda w STD :: wektor. Dowiedzmy Się:

Czy jest jakaś metoda pop_front w C ++ std :: vector?

NIE to szybka odpowiedź na to zapytanie. Wektory nie mają wbudowanej metody pop_front w bibliotece standardowej C ++, w przeciwieństwie do innych klas kontenerów, takich jak deque i lista. Podstawowa zasada projektowania wektorów, która promuje szybki losowy dostęp do elementów, jest przyczyną tej nieobecności. Usunięcie pierwszego elementu wymaga przesunięcia wszystkich kolejnych komponentów, ponieważ wektory przechowują swoje elementy w ciągłym bloku pamięci.

Konieczne jest przyjrzenie się pop_back Aby uzyskać dlaczego pop_front jest niedostępny w STD :: wektor. Wspólna metoda wektora zwana pop_back eliminuje końcowy składnik pojemnika. Odbywa się to poprzez wykonanie destrukta członka, który został usunięty i obniżając rozmiar wektora o jeden. Gdy wektory rozszerzają się od ich pleców, wyeliminowanie końcowego komponentu jest prostą operacją, która nie wymaga przeniesienia żadnych innych elementów. Jednak wyeliminowanie początkowego elementu spowodowałoby, że wszystkie kolejne komponenty przesuną jedno miejsce w lewo. Ponieważ ta procedura kopiuje każdy element wektorowy, jest on niezwykle nieefektywny, szczególnie w przypadku dużych wektorów. pop_front jest zatem wykluczony ze std :: wektor, aby zapobiec spowolnieniu operacji wektorowych.

Alternatywy metody pop_front w c++

Istnieje wiele sposobów usunięcia komponentów z przodu wektora, pomimo braku pop_front metoda.

1: Metoda usuwania

Jedną techniką jest wykorzystanie Metoda usuwania na początkowym elemencie wektora. Metoda usuwania modyfikuje pozostałe komponenty w celu odzwierciedlenia usunięcia elementu lub zestawu elementów z wektora. W ten sposób możemy użyć następującego wiersza kodu w C ++, aby osiągnąć takie samo zachowanie co pop_front:

#włączać
#włączać
szablon
void pop_front (std :: wektor i v)

if (v.size ()> 0)
v.usunąć (v.zaczynać());


int main ()

STD :: wektor NUMS = 5,6,7,8,9;
pop_front (nums);
dla (int i: nums)
STD :: Cout << i << ";

powrót 0;

W powyższym kodzie używamy usuwać() działać jako alternatywa pop_front () Aby usunąć pierwszy element wektora zainicjowany. Zdefiniowaliśmy funkcję nazwaną pop_front (), I w funkcji używamy zaczynać() I usuwać() funkcje usuwania pierwszego elementu wektora.

Wyjście

2: Metoda deque

Kolejnym pojemnikiem w standardowej bibliotece C ++ jest deque, który oferuje możliwość dynamicznego kontenera przypominającego tablicę z dodatkową możliwością dodawania i usuwania elementów z przodu i z tyłu. Używać deque (kolejka podwójna) zamiast wektora jest dodatkowym substytutem pop_front. Możemy więc użyć go do osiągnięcia tego samego zachowania co pop_front:

#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()

Deque MyDeque;
MyDeque.push_front (4);
MyDeque.push_front (5);
MyDeque.push_front (6);
MyDeque.pop_front ();
dla (auto it = myDeque.zaczynać(); To != myDeque.koniec(); ++ it)
Cout << " << *it;

W powyższym kodzie używamy push_front () funkcja, aby popchnąć wartości w deque i pop_front () funkcja usuwania pierwszego elementu z deque.

Wyjście

Wniosek

Ze względu na wewnętrzną strukturę pamięci i zasady projektowania, STD :: wektor W C ++ nie ma pop_front metoda. Istnieje jednak kilka dodatkowych technik, takich jak użycie Deque I usuwać metody, które można użyć do usuwania elementów z przodu pojemnika. Wybierając najlepsze podejście do ich implementacji, programiści muszą iść na kompromis między wygodą a wydajnością.