Inserarea unei valori într-un vector în C++ 23
1. Obiectivele lecției:
- Să înțeleagă principiul inserării unei valori într-un vector.
- Să implementeze algoritmi pentru inserarea unei valori la o poziție specificată.
- Să rezolve probleme practice care implică modificarea unui vector.
2. Conținutul lecției:
Ce este un vector?
- Un vector (array) este o structură de date care stochează o colecție de valori de același tip.
- Vectorii au o dimensiune fixă, ceea ce înseamnă că dimensiunea trebuie specificată la momentul declarării.
Inserarea unei valori într-un vector
1. Principiu:
- Dacă vectorul are un spațiu suficient pentru a accepta o valoare nouă, deplasăm elementele pentru a face loc.
- Plasăm valoarea în poziția specificată.
- Actualizăm dimensiunea logică a vectorului (numărul de elemente stocate).
2. Pași pentru inserare:
- Identificați poziția: Determinați indexul unde se va insera valoarea.
- Deplasați elementele: Mutați toate elementele de la poziția respectivă spre dreapta.
- Inserați valoarea: Adăugați valoarea la poziția dorită.
Pseudocod:
Intrare: vector, dimensiune, pozitie, valoare
Dacă pozitie < 0 sau pozitie > dimensiune:
Afișează eroare
Altfel:
Pentru i = dimensiune – 1 la pozitie:
vector[i + 1] = vector[i]
vector[pozitie] = valoare
dimensiune++
3. Cod în C++
Exemplu 1: Inserarea unei valori într-un vector fix
#include <iostream>
using namespace std;
void inserareValoare(int arr[], int& dim, int pozitie, int valoare) {
if (pozitie < 0 || pozitie > dim) {
cout << „Pozitie invalida!” << endl;
return;
}
// Deplasăm elementele spre dreapta
for (int i = dim; i > pozitie; i–) {
arr[i] = arr[i – 1];
}
// Inserăm valoarea
arr[pozitie] = valoare;
// 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, valoare;
cout << „Introduceti pozitia si valoarea de inserat: „;
cin >> pozitie >> valoare;
inserareValoare(arr, dim, pozitie, valoare);
cout << „Vector dupa inserare: „;
afisareVector(arr, dim);
return 0;
}
Exemplu 2: Inserarea într-un vector dinamic (folosind std::vector)
#include <iostream>
#include <vector>
using namespace std;
void inserareValoare(vector<int>& arr, int pozitie, int valoare) {
if (pozitie < 0 || pozitie > arr.size()) {
cout << „Pozitie invalida!” << endl;
return;
}
// Inserăm valoarea folosind metoda `insert`
arr.insert(arr.begin() + pozitie, valoare);
}
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, valoare;
cout << „Introduceti pozitia si valoarea de inserat: „;
cin >> pozitie >> valoare;
inserareValoare(arr, pozitie, valoare);
cout << „Vector dupa inserare: „;
afisareVector(arr);
return 0;
}
4. Complexitatea algoritmului
- Inserare într-un vector fix (array):
- Complexitate temporală: O(n), unde nnn este dimensiunea vectorului. Este nevoie de deplasarea elementelor.
- Complexitate spațială: O(1) – nu necesită spațiu suplimentar.
- Inserare într-un vector dinamic (std::vector):
- Complexitate temporală: O(n), datorită deplasării elementelor.
- Complexitate spațială: Depinde de gestionarea internă a memoriei în std::vector.
5. Activități practice pentru elevi
- Scrieți un program care permite utilizatorului să insereze mai multe valori în diferite poziții dintr-un vector.
- Implementați o funcție care inserează o valoare doar dacă aceasta nu există deja în vector.
- Realizați un program care inserează un element într-un vector sortat, păstrând ordinea.
6. Scheme logice
- Inserarea într-un vector fix:
- Start -> Verifică poziția -> Deplasează elementele -> Inserează valoarea -> Actualizează dimensiunea -> Stop.
- Inserarea într-un std::vector:
- Start -> Folosește metoda insert -> Actualizează vectorul -> Stop.
7. Concluzie:
- Inserarea într-un vector necesită deplasarea elementelor, ceea ce poate face operația costisitoare pentru vectori mari.
- Folosirea vectorilor dinamici (std::vector) simplifică gestionarea memoriei și oferă metode predefinite pentru inserare.
- Practica ajută la înțelegerea implementării și optimizării acestor operații.