Problema Ștergerii unui Element din Vector în C++ 24
1. Obiectivele lecției:
- Să înțeleagă principiul ștergerii unui element dintr-un vector.
- Să implementeze algoritmi pentru ștergerea unui element specificat.
- Să rezolve probleme practice care implică modificarea unui vector.
2. Conținutul lecției:
Ce înseamnă ștergerea unui element dintr-un vector?
- Definiție: Ștergerea unui element implică eliminarea acestuia din vector, mutând restul elementelor spre stânga pentru a umple spațiul rămas.
- Condiție: După ștergere, dimensiunea logică a vectorului trebuie actualizată.
Ștergerea unui element într-un vector
1. Principiu:
- Identificați indexul elementului care trebuie șters.
- Deplasați toate elementele aflate după acest index cu o poziție spre stânga.
- Actualizați dimensiunea logică a vectorului.
2. Pași pentru ștergere:
- Căutați poziția: Găsiți poziția elementului care trebuie șters.
- Deplasați elementele: Mutați elementele rămase spre stânga.
- Actualizați dimensiunea: Reduceți dimensiunea logică a vectorului cu 1.
Pseudocod:
Intrare: vector, dimensiune, pozitie
Dacă pozitie < 0 sau pozitie >= dimensiune:
Afișează eroare
Altfel:
Pentru i = pozitie la dimensiune – 2:
vector[i] = vector[i + 1]
dimensiune–
3. Cod în C++
Exemplu 1: Ștergerea unui element dintr-un vector fix
#include <iostream>
using namespace std;
void stergereElement(int arr[], int& dim, int pozitie) {
if (pozitie < 0 || pozitie >= dim) {
cout << „Pozitie invalida!” << endl;
return;
}
// Deplasăm elementele spre stânga
for (int i = pozitie; i < dim – 1; i++) {
arr[i] = arr[i + 1];
}
// Actualizăm dimensiunea
dim–;
}
void afisareVector(int arr[], int dim) {
for (int i = 0; i < dim; i++) {
cout << arr[i] << ” „;
}
cout << endl;
}
int main() {
int arr[10] = {1, 2, 3, 4, 5};
int dim = 5;
cout << „Vector initial: „;
afisareVector(arr, dim);
int pozitie;
cout << „Introduceti pozitia elementului de sters: „;
cin >> pozitie;
stergereElement(arr, dim, pozitie);
cout << „Vector dupa stergere: „;
afisareVector(arr, dim);
return 0;
}
Exemplu 2: Ștergerea unui element dintr-un vector dinamic (std::vector)
#include <iostream>
#include <vector>
using namespace std;
void stergereElement(vector<int>& arr, int pozitie) {
if (pozitie < 0 || pozitie >= arr.size()) {
cout << „Pozitie invalida!” << endl;
return;
}
// Folosim metoda erase
arr.erase(arr.begin() + pozitie);
}
void afisareVector(const vector<int>& arr) {
for (int val : arr) {
cout << val << ” „;
}
cout << endl;
}
int main() {
vector<int> arr = {1, 2, 3, 4, 5};
cout << „Vector initial: „;
afisareVector(arr);
int pozitie;
cout << „Introduceti pozitia elementului de sters: „;
cin >> pozitie;
stergereElement(arr, pozitie);
cout << „Vector dupa stergere: „;
afisareVector(arr);
return 0;
}
4. Complexitatea algoritmului
- Ștergerea dintr-un vector fix (array):
- Complexitate temporală: O(n), deoarece elementele rămase trebuie deplasate.
- Complexitate spațială: O(1), deoarece nu este nevoie de memorie suplimentară.
- Ștergerea dintr-un vector dinamic (std::vector):
- Complexitate temporală: O(n), deoarece std::vector folosește o metodă similară de deplasare.
- Complexitate spațială: Depinde de gestionarea memoriei în std::vector.
5. Activități practice pentru elevi
- Scrieți un program care șterge toate aparițiile unei valori specificate dintr-un vector.
- Realizați un program care elimină elementele duplicate dintr-un vector.
- Implementați o funcție care șterge ultimul element al unui vector și actualizează dimensiunea acestuia.
6. Scheme logice
- Ștergerea dintr-un vector fix:
- Start -> Verifică poziția -> Deplasează elementele spre stânga -> Actualizează dimensiunea -> Stop.
- Ștergerea dintr-un std::vector:
- Start -> Verifică poziția -> Folosește metoda erase -> Actualizează vectorul -> Stop.
7. Concluzie:
- Ștergerea unui element dintr-un vector este o operație frecvent utilizată în programare.
- Vectorii dinamici (std::vector) simplifică gestionarea memoriei și operațiunile de ștergere.
- Înțelegerea acestei operații ajută la gestionarea eficientă a datelor în aplicațiile C++.