Cum funcționează
Un vector nu are operație de „ștergere". Elementele stau lipite în memorie, deci singurul mod de a
scoate unul e să tragi peste el tot ce vine după.
Bucla face exact asta: fiecare element se mută cu o poziție la stânga, începând de la cel șters.
indici: 0 1 2 3 4 5 6 7
X: 16 5 90 [434] 55 71 31 33
↖── 55 ←─ 71 ←─ 31 ←─ 33
X: 16 5 90 55 71 31 33
Detaliile care contează:
k - 1 este indicele real. Enunțul numără pozițiile de la 1, C++ de la 0. Poziția 4 înseamnă
indicele 3 — acolo unde stă 434.
Bucla se oprește la n - 1, nu la n. La fiecare pas se citește x[i + 1]; dacă i ar ajunge
la n - 1, ai citi x[n], adică în afara datelor.
n-- la final. Vectorul are acum un element mai puțin. Fără asta, ai afișa și vechiul ultim
element, rămas duplicat la coadă.
Validarea se face înainte de orice modificare: k trebuie să fie între 1 și n. Verificarea
k < 1 contează — o poziție 0 sau negativă e la fel de invalidă ca una prea mare, chiar dacă
exemplul din enunț arată doar al doilea caz.
Greșeli frecvente
- Folosirea lui
k direct ca indice, fără - 1 — se șterge elementul vecin.
i < n în loc de i < n - 1 — se citește x[n], o valoare din afara vectorului.
- Uitarea lui
n-- — ultimul element apare de două ori.
- Deplasarea la dreapta (
x[i + 1] = x[i]) — în loc să ștergi, multiplici elementul peste tot.
- Validarea doar pentru
k > n — poziții precum 0 sau -3 trec și strică vectorul.