Modyfikowanie wektorów: insert, erase, clear
Wstawiaj, usuwaj i czyść elementy, pamiętając o zasadach unieważniania iteratorów
Modyfikowanie wektorów: insert, erase, clear to bezpłatna lekcja C++ Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej C++ Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs C++ Academy zawiera 4 lekcji w sumie.
Wstawianie na końcu
Najszybsze wstawianie zapewniają push_back i emplace_back — obie funkcje dodają element na końcu w zamortyzowanym czasie O(1).
Wstawianie w dowolnej pozycji
insert(pos, value) przesuwa w prawo wszystkie elementy znajdujące się za pos. Jest to operacja O(n).
std::vector<int> v = {1, 2, 4, 5};
v.insert(v.begin() + 2, 3); // {1, 2, 3, 4, 5}Wstawianie zakresu
Wstaw wszystkie elementy z innego kontenera jednocześnie.
std::vector<int> v = {1, 5};
std::vector<int> mid = {2, 3, 4};
v.insert(v.begin() + 1, mid.begin(), mid.end());
// {1, 2, 3, 4, 5}Wstawianie wielu kopii
Wstaw n kopii tej samej wartości.
std::vector<int> v = {1, 4};
v.insert(v.begin() + 1, 2, 99); // {1, 99, 99, 4}Usuwanie jednego elementu
erase(pos) usuwa element wskazywany przez iterator i przesuwa w lewo wszystkie znajdujące się za nim elementy. Zwraca iterator do następnego elementu.
std::vector<int> v = {1, 2, 3, 4};
v.erase(v.begin() + 1); // {1, 3, 4}Usuwanie zakresu
Usuń wszystkie elementy z półotwartego zakresu [first, last).
v.erase(v.begin() + 1, v.begin() + 3);Idiom erase-remove
Aby usunąć wszystkie elementy spełniające predykat bez pozostawiania luk, połącz std::remove_if i erase.
#include <algorithm>
v.erase(
std::remove_if(v.begin(), v.end(), [](int x) { return x < 0; }),
v.end()
);C++20 std::erase i std::erase_if
W C++20 dodano wolne funkcje, które opakowują idiom erase-remove.
std::erase(v, 0); // remove all 0s
std::erase_if(v, [](int x) { return x < 0; });clear: usuwanie wszystkich elementów
clear() usuwa wszystkie elementy, ale zachowuje pojemność. Jest to przydatne, gdy planujesz ponownie wypełnić wektor.
pop_back: usuwanie ostatniego elementu
Usunięcie ostatniego elementu w czasie O(1). Funkcja nie zwraca wartości — jeśli jej potrzebujesz, pobierz ją wcześniej.
int last = v.back();
v.pop_back();Zasady unieważniania iteratorów
insert i erase unieważniają każdy iterator od zmodyfikowanej pozycji włącznie. erase zwraca następny prawidłowy iterator, dzięki czemu można kontynuować iterację.
Szybkie sprawdzenie
Co funkcja std::remove_if robi z wektorem, gdy zostanie użyta samodzielnie?
Podsumowanie
insert i erase działają w dowolnych pozycjach w czasie O(n). Używaj push_back/pop_back, aby wykonywać operacje na końcu w czasie O(1). Stosuj idiom erase-remove (lub std::erase_if z C++20) do usuwania pasujących elementów.
Często zadawane pytania
Czy lekcja „Modyfikowanie wektorów: insert, erase, clear” jest bezpłatna?
Tak — pełny tekst „Modyfikowanie wektorów: insert, erase, clear” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu C++ Academy, przejdź na CoddyKit PRO. Kurs C++ Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Modyfikowanie wektorów: insert, erase, clear”?
Wstawiaj, usuwaj i czyść elementy, pamiętając o zasadach unieważniania iteratorów Ćwiczysz C++ Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć C++ Academy?
Nie wymagamy żadnego doświadczenia. C++ Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „Modyfikowanie wektorów: insert, erase, clear”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji C++ Academy?
Tak. Każda lekcja C++ Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Podstawy std::vector: push_back, size, capacity
- Iterowanie po wektorach: indeksy, range-for, iteratory
- Modyfikowanie wektorów: insert, erase, clear
- Vector a std::array i tablica C