VECTOR(DINAMIČKI NIZ) U C++
Generički kontejner objekata istog tipa koji predstavlja alternativu C++ poljima. Drugim rečima to su dinamičke liste. Za razliku od nizova čija se dimenzija ne menja, kod vektora se dinamički može promeniti.
Deklaracija niza je:
Deklaracija niza je:
int niz[3]={4,2,7}
Ovde se mora navesti u uglastoj zagradi dimenzija(3) koja se dalje ne može menjati.
Za razliku od lista kod vektora se dimenzija može menjati u toku programa.
Ovde se mora navesti u uglastoj zagradi dimenzija(3) koja se dalje ne može menjati.
Za razliku od lista kod vektora se dimenzija može menjati u toku programa.
Uključivanje datoteke vector
Da bi u našem program mogli koristiti vektor, potrebno ga je uključiti pomoću directive #include:
#include < vector >
Treba dodati i sledeći red ispod toga, kojim se definiše upotreba prostora imena std:
using namespace std;
U suprotnom bi svaki put kad se želi pozvati vector moralo pisati std::vector
Primer upotrebe vectora:
using namespace std;
U suprotnom bi svaki put kad se želi pozvati vector moralo pisati std::vector
Primer upotrebe vectora:
#include < vector >
using namespace std;
vector < int > a(10);
using namespace std;
vector < int > a(10);
Ovo je deklaracija vektora čiji su podaci tipa int
Ovde je:
a[3]
Ovde je:
- vector-identifikacija vektora
- <int> - tip podataka koji se koriste u vektoru, u ovom slučaju celobrojni
- a - naziv vektora
a[3]
Metode vektora
Neke od metoda za rad sa vektorima u c++:
Dodavanje elementa na kraj vektora
Metoda push_back
primer dodavanja broja 13 na kraj vektora a:
primer dodavanja broja 13 na kraj vektora a:
a.push_back(13);
Veličina vektora
Veličina vektora se može odrediti metodom. Primer upotrebe:
#include < vector >
using namespace std;
vector < int > b={10,20,30,40,50};
cout << "Vektor ima " << b.size() << " elemenata" << endl;
using namespace std;
vector < int > b={10,20,30,40,50};
cout << "Vektor ima " << b.size() << " elemenata" << endl;
Uzimanje prvog elementa iz vektora
Prvi element vektora se može dobiti metodom vector::front().
#include < vector >
using namespace std;
vector < int > grupa={"Mika","Pera","Laza","Nataša"};
cout << "Prvi u grupi je " << grupa.front() << endl;
using namespace std;
vector < int > grupa={"Mika","Pera","Laza","Nataša"};
cout << "Prvi u grupi je " << grupa.front() << endl;
Na izlazu bi se prikazalo: Mika
Uzimanje poslednjeg elementa u vektoru
Poslednji element se iz vektora može preuzeti pomoću metode vector::back(). Npr. u prethodnom primeru vektora grupa, poslednji
član grupe bi bio:
član grupe bi bio:
#include < vector >
using namespace std;
vector < string > grupa={"Mika","Pera","Laza","Nataša"};
cout << "Poslednji u grupi je " << grupa.back() << endl;
using namespace std;
vector < string > grupa={"Mika","Pera","Laza","Nataša"};
cout << "Poslednji u grupi je " << grupa.back() << endl;
Na izlazu bi se prikazalo: Nataša
Ubacivanje vrednosti na određenu poziciju u vektoru
Pretpostavimo da je zadat proizvoljan dinamički niz brojeva:
vector < int > brojevi={0, 4, 11, 6};
Ako želimo npr. da novi broj 5 zamenimo sa postojećim brojem 11, koji se nalazi na poziciji 2 u nizu, to možemo da uradimo na sledeći način:
brojevi[2] = 5;
ili korišćenjem funkcije at:
brojevi.at(2) = 5;
Niz posle izmene bi izgledao:
{0, 4, 5, 6};
Može se uočiti da se na ovaj način briše vrednost koja je prethodno bila na umetnutoj poziciji. Ako želimo da zadržimo i prethodni element, a umetnemo novi, onda treba da se koristi funkcija insert za ubacivanje. Na primer, ako želimo, sada da dodamo vrednost 3 na poziciju 1, onda bi to mogli da uradimo na sledeći način:
int poz = 1;
auto itr=brojevi.begin() + poz;
brojevi.insert(itr, 3);
auto itr=brojevi.begin() + poz;
brojevi.insert(itr, 3);
Posle toga niz bi izgledao
{0, 3, 4, 5, 6};
Možemo uočiti da je vrednost 3 umetnuta na poziciju 1, a vrednost 4 koja je ranije bila na tom mestu se pomerila na poziciju 2.
Takođe može se na određenu poziciju dodati i niz vrednosti. Npr. ako na poziciju 3 sada, želimo da umetnemo sledeći niz:
Takođe može se na određenu poziciju dodati i niz vrednosti. Npr. ako na poziciju 3 sada, želimo da umetnemo sledeći niz:
{11, 12, 13};
uradili bi to na sledeći način:
int poz = 3;
auto itr=brojevi.begin() + poz;
brojevi.insert(itr, {11, 12, 13});
auto itr=brojevi.begin() + poz;
brojevi.insert(itr, {11, 12, 13});
Niz bi posle umetanja izgledao:
{0, 3, 4, 5, 11, 12, 13, 6};
Brisanje poslednjeg elementa vektora
Poslednji element vektora može se izbrisati metodom vector::pop_back
Sledeći primer ilustruje primenu ove metode:
Sledeći primer ilustruje primenu ove metode:
#include < vector >
using namespace std;
vector < double > temperature={23.2 , 25.8 , 11, 15.3, 17};
temperature.pop_back();
using namespace std;
vector < double > temperature={23.2 , 25.8 , 11, 15.3, 17};
temperature.pop_back();
Posle ove komande vrednosti vektora su: 23.2, 25.8, 11, 15.3
Brisanje elementa vektora na određenoj poziciji
vector::erase(it) će izbrisati element vektora na koju pokazuje iterator it
Primer:
Primer:
#include < vector >
using namespace std;
vector < int > c={2,3,4};
c.erase(c.begin() + 1);//briše element na poziciji 1 u vektoru
using namespace std;
vector < int > c={2,3,4};
c.erase(c.begin() + 1);//briše element na poziciji 1 u vektoru
Posle brisanja elementi vektora su: 2, 4
Brisanje svih elemenata vektora
Ukoliko želimo da ispraznimo vektor, tj. da obrišemo sve njegove elemente možemo koristiti metodu vector::clear()
Primer upotrebe:
Primer upotrebe:
#include < vector >
using namespace std;
vector < int > c={2,3,4};
c.clear();//briše sve elemente u vektoru
using namespace std;
vector < int > c={2,3,4};
c.clear();//briše sve elemente u vektoru
Posle ovoga vektor će biti prazan
Ispisivanje elemenata vektora
Neka je dat sledeći vektor:
#include < vector >
using namespace std;
vector < int > brojevi={1,2,3,4,5};
using namespace std;
vector < int > brojevi={1,2,3,4,5};
Primer ispisivanja brojeva na standardnom izlazu:
for(int i = 0; i < brojevi.size(); i++)
{
cout << endl;
{
cout << brojevi[i] << " ";
}cout << endl;
Na izlazu: 1 2 3 4 5
Čitanje tekstualnih podataka sa standardnog ulaza i ubacivanje jednog po jednog u vektor
Potrebno je uključiti i zaglavlje <string>. Upotrebom while petlje učitava se jedna po jedna reč i dodaje u vektor:
#include < vector >
#include < iostream >
#include < string >
using namespace std;
vector <string> text;
string rec;
while(cin >> rec)
{
#include < iostream >
#include < string >
using namespace std;
vector <string> text;
string rec;
while(cin >> rec)
{
text.push_back(rec);
}Prolaženje kroz elemente vektora pomoću iteratora []
Da bi se na standardnom izlazu ispisale reči unešene u vektor u prethodnom primeru potrebno je izvršiti sledeći kod:
cout << "Reči u tekstu:\n" << endl;
for(int i = 0; i < text.size(); i++)
{
cout << endl;
for(int i = 0; i < text.size(); i++)
{
cout << text[i] << " ";
}cout << endl;
Prolaženje kroz elemente vektora pomoću iteratora
Sledeći kod pokazuje upotrebu iteratora za prolaz kroz elemente vektora
#include < vector >
using namespace std;
vector < int > poeni={5,3,5,7,8,2,3,4};
cout << "Broj poena po zadacima:\n " << endl;
for(vector < int >::iterator it=poeni.begin(); it != poeni.end(); ++it)
{
cout << endl;
using namespace std;
vector < int > poeni={5,3,5,7,8,2,3,4};
cout << "Broj poena po zadacima:\n " << endl;
for(vector < int >::iterator it=poeni.begin(); it != poeni.end(); ++it)
{
cout << *it << " ";
}cout << endl;
U prethodnom kodu su primenjene i sledeće funkcije:
v.begin() – vraća iterator koji pokazuje na početni element kontejnera
v.end() – vraća iterator koji pokazuje "iza zadnjeg" elementa kontejnera.
v.begin() – vraća iterator koji pokazuje na početni element kontejnera
v.end() – vraća iterator koji pokazuje "iza zadnjeg" elementa kontejnera.
Sortiranje vektora bibliotečnom funkcijom sort
Funkcija sort se nalazi u zaglavlju <algorithm> koje je potrebno uključiti na početku fajla.
#include < algorithm >
Parametri koje treba proslediti su pokazivači na prvi i poslednji element koji treba sortirati u nizu. Ako je potrebno sortirati ceo niz onda bi kod bio kao na sledećem primeru:
#include < vector >
using namespace std;
vector < int > A={4,2,7,5,9};
sort(a.begin(),a.end());
//Ispis
using namespace std;
vector < int > A={4,2,7,5,9};
sort(a.begin(),a.end());
//Ispis