C ++

Kako koristiti C ++ Vector

Kako koristiti C ++ Vector

Uvod

Niz je niz istih vrsta objekata na uzastopnim memorijskim mjestima. Niz ne može povećati ili smanjiti rudu. Vektor je poput niza, ali njegova se duljina može povećati ili smanjiti. Vektor, dakle, ima mnogo više operacija nego niz.

C ++ ima mnogo knjižnica koje sve čine C ++ standardnu ​​knjižnicu. Jedna od tih knjižnica je knjižnica spremnika. Spremnik je zbirka predmeta i na zbirci se mogu izvoditi određene radnje. C ++ spremnici mogu se grupirati u dva skupa: spremnici za sekvence i asocijativni spremnici. Spremnici sekvence su vektor, niz (nije isti niz o kojem smo prethodno razgovarali), deque, forward_list i list. To su različite zbirke (strukture podataka slične nizu) i svaka nudi različite kompromise.

Bilo koji programer trebao bi znati odlučiti hoće li koristiti vektor, niz, deque, forward_list ili popis. Kada programer treba strukturu koja zahtijeva više operacija od onih povezanih s običnim nizom, obični niz ne bi se trebao koristiti.

Ako zadatak uključuje česta umetanja i brisanja usred niza, tada treba koristiti popis ili prosljeđeni_popis. Ako zadatak uključuje česta umetanja i brisanja na početku ili na kraju niza, tada treba koristiti deque. Vektor treba koristiti kada ove vrste operacija nisu potrebne.

Ovaj vam članak pokazuje kako koristiti C ++ vektor. Za razumijevanje ovog članka trebat će vam neko znanje o C ++ pokazivačima, referencama i nizovima.

Klasa i predmeti

Klasa je skup varijabli i funkcija koje djeluju zajedno, gdje varijablama nisu dodijeljene vrijednosti. Kad su vrijednosti dodijeljene varijablama, klasa postaje objekt. Različite vrijednosti dane istoj klasi rezultiraju različitim objektima; to jest, različiti objekti mogu biti iste klase, ali imaju različite vrijednosti. Stvaranje objekta iz klase poznato je i kao instanciranje objekta.

Pojam vektor opisuje klasu. Objekt stvoren od vektora ima ime koje odabere programer.

Funkcija koja pripada klasi potrebna je za instanciranje objekta iz klase. U C ++-u ta funkcija ima isto ime kao i naziv klase. Različiti objekti stvoreni (instancirani) iz klase imaju različita imena koja je svakom od njih dao programer.

Stvaranje objekta iz klase znači konstrukciju objekta; to također znači instanciranje objekta.

Vektorska klasa

Vektorska klasa je već definirana i nalazi se u knjižnici. Da bi koristio vektorsku klasu, programer mora uključiti zaglavlje vektora u datoteku sa slijedećom smjernicom pretprocesiranja:

#include

Jednom kad je zaglavlje uključeno, sve vektorske značajke (članovi podataka i funkcije člana) postaju dostupne. Da biste koristili objekt count za izlaz podataka na terminal (konzolu), zaglavlje objekta također mora biti uključeno. Da biste napisali program s vektorom, moraju biti uključena najmanje sljedeća zaglavlja:

#include
#include

Instanciranje vektora

int foo [10];

Iznad je deklaracija niza s imenom "foo" i brojem elemenata "10.”Ovo je niz cijelih brojeva. Deklaracija vektora je slična. Za vektor, broj elemenata nije obvezan, jer se duljina vektora može povećavati ili smanjivati.

U ovom trenutku u programu, vektorska klasa je već definirana u knjižnici i zaglavlje je uključeno. Instaliranje vektora može se izvršiti na sljedeći način:

std :: vektor vtr (8);

Ovdje je vektor posebne funkcije konstruktora. Vrsta podataka koje će vektor sadržavati je "int", u kutnim zagradama. Izraz "vtr" naziv je koji je programer odabrao za vektor. Konačno, "8", u zagradama, je okvirni broj cijelih brojeva koje će vektor imati.

Pojam "std" označava standardni prostor imena. U ovom kontekstu ovaj izraz mora slijediti dvostruko dvotočka. Svatko može napisati vlastitu knjižnicu vektorskih klasa i koristiti je. Međutim, C ++ već ima standardnu ​​knjižnicu sa standardnim imenima, uključujući „vektor.”Da biste koristili standardni naziv, standardnom imenu mora prethoditi std :: . Da biste izbjegli tipkanje std :: svaki put u programu za standardno ime, programska datoteka može započeti na sljedeći način:

#include
#include
pomoću prostora imena std;

Preopterećenje funkcije

Kad dva ili više različitih potpisa funkcije imaju isto ime, kaže se da je to ime preopterećeno. Kada se pozove jedna funkcija, broj i vrsta argumenata određuju koja će se funkcija izvršiti.

Konstruiranje vektora

Konstruiranje vektora znači instanciranje (stvaranje) vektorskog objekta. Funkcija konstruktora preopterećena je kako slijedi:

vektor Ime

To stvara vektor duljine nula i upisujemo „T.”Sljedeća izjava stvara vektor nulte duljine tipa„ float ”s imenom„ vtr: ”

vektor vtr;

vektor ime (n)

Ovo stvara vektor s n elemenata tipa “T.”Izjava za ovaj vektor s četiri plutajuća elementa je sljedeća:

vektor vtr (4);

vektor ime (n, t)

To stvara vektor od n elemenata inicijaliziranih u vrijednost t. Sljedeća izjava stvara vektor od 5 elemenata, pri čemu svaki element ima vrijednost 3.4:

vektor vtr (5, 3.4);

Konstruiranje s inicijalizacijom

Vektor se može istovremeno konstruirati (stvoriti) i inicijalizirati na jedan od sljedeća dva načina:

vektor vtr = 1.1, 2.2, 3.3, 4.4;

Ili

vektor vtr 1.1, 2.2, 3.3, 4.4;

Imajte na umu da nema zagrada neposredno nakon naziva objekta. Zagrade koje se koriste neposredno nakon naziva objekta trebale bi imati popis inicijalizatora, kako slijedi:

vektor vtr (1.1, 2.2, 3.3, 4.4);

Vektor se može konstruirati i inicijalizirati kasnije s popisom inicijalizatora. U tom se slučaju zagrade neće koristiti:

vektor vtr;
vtr = 1.1, 2.2, 3.3, 4.4;

vektor V2 (V1)

Ovo je konstruktor kopija. Stvara vektor V2 kao kopiju vektora V1. Sljedeći kod to ilustrira:

vektor vtr1 (5, 3.4);
vektor vtr2 (vtr1);

Dodjeljivanje vektora tijekom gradnje

Tijekom gradnje može se stvoriti prazan vektor dok mu se dodjeljuje drugi, kako slijedi:

vektor vtr1 1.1, 2.2, 3.3, 4.4;
vektor vtr2 = vtr1;

Druga je izjava ekvivalentna:

vektor vtr2 = 1.1, 2.2, 3.3, 4.4;

const Vector

Const vektor je vektor čiji se elementi ne mogu mijenjati. Vrijednosti u ovom vektoru su samo za čitanje. Kada se stvori, vektor se pojavljuje na sljedeći način:

const vektor vtr 1.1, 2.2, 3.3, 4.4;

U ovom vektorskom tipu nijedan se element ne može dodati ili ukloniti. Štoviše, nijedna se vrijednost ne može promijeniti.

Konstruiranje s Iteratorom

Predložak pruža generički prikaz za vrstu podataka. Iterator pruža generički prikaz skeniranja kroz vrijednosti spremnika. Sintaksa za stvaranje vektora s iteratorom je sljedeća:

predložak
vektor (prvi InputIterator, zadnji InputIterator, const Allocator & = Allocator ());

Ovo konstruira vektor za raspon [prvi, zadnji) pomoću navedenog alokatora, o čemu će biti riječi kasnije u ovom članku.

Uništavanje vektora

Da biste uništili vektor, jednostavno mu dopustite da izađe iz opsega i uništavanje se obrađuje automatski.

Kapacitet vektora

size_type kapacitet () const noexcept

Funkcija člana kapaciteta vraća ukupni broj elemenata koje vektor može držati bez potrebe za preraspodjelom. Segment koda za to je sljedeći:

vektor vtr (4);
int num = vtr.kapacitet();
cout << num << '\n';

Izlaz je 4.

pričuva (n)

Prostor memorije nije uvijek slobodno dostupan. Dodatni prostor možete rezervirati unaprijed. Razmotrite sljedeći segment koda:

vektor vtr (4);
vtr.rezerva (6);
cout << vtr.capacity() << '\n';

Izlaz je 6. Dakle, dodatni rezervirani prostor je 6 - 4 = 2 elementa. Funkcija vraća void.

veličina () const noexcept

To vraća broj elemenata u vektoru. Sljedeći kod ilustrira ovu funkciju:

vektor vtr (4);
plutajuće sz = vtr.veličina();
cout << sz << '\n';

Izlaz je 4.

smanjiti da stane()

Nakon što vektoru dodijelite dodatni kapacitet pomoću funkcije reserve (), vektor se može umanjiti tako da odgovara njegovoj izvornoj veličini. Sljedeći kod to ilustrira:

vektor vtr (4);
vtr.rezerva (6);
vtr.smanjiti da stane();
int sz = vtr.veličina();
cout << sz << '\n';

Izlaz je 4, a ne 6. Funkcija vraća void.

promjena veličine (sz), promjena veličine (sz, c)

Ovo mijenja veličinu vektora. Ako je nova veličina manja od stare, elementi se prema kraju brišu. Ako je nova veličina dulja, tada se pred kraj dodaje neka zadana vrijednost. Da biste dodali određenu vrijednost, upotrijebite funkciju resize () s dva argumenta. Sljedeći segment koda ilustrira upotrebu ove dvije funkcije:

vektor vtr1 1.1, 2.2, 3.3, 4.4;
vtr1.promjena veličine (2);
cout << "New size of vtr1: " << vtr1.size() << '\n';
vektor vtr2 1.1, 2.2;
vtr2.promjena veličine (4, 8.8);
cout << "vtr2: "<< vtr2[0] <<" "<< vtr2[1] <<"
"<< vtr2[2] <<" "<< vtr2[3] << '\n';

Rezultat je sljedeći:

Nova veličina vtr1: 2
vtr2: 1.1 2.2 8.8 8.8

Funkcije se vraćaju ništavne.

prazno () const noexcept

Ova funkcija vraća 1 za true ako u vektoru nema elemenata i 0 za false ako je vektor prazan. Ako vektor ima 4 mjesta za određenu vrstu podataka, poput plutajuće, bez ikakve plutajuće vrijednosti, tada taj vektor nije prazan. Sljedeći kod to ilustrira:

vektor vtr;
cout << vtr.empty() << '\n';
vektor vt (4);
cout << vt.empty() << '\n';
vektor v (4,3.5);
cout << v.empty() << '\n';

Rezultat je sljedeći:

1
0
0

Pristup vektorskim elementima

Vektor se može podkriptirati (indeksirati) poput niza. Brojanje indeksa započinje od nule.

ime vektora [i]

Operacija "vectorName [i]" vraća referencu na element na ith indeks vektora. Sljedeći izlazni kod 3.3 za gornji vektor:

vektor vtr 1.1, 2.2, 3.3, 4.4;
plutajuće fl = vtr [2];
cout << fl << '\n';

vectorName [i] const

Operacija „vectorName [i] const“ izvršava se umjesto „vectorName [i]“ kada je vektor konstantan vektor. Ova se operacija koristi u sljedećem kodu:

const vektor vtr 1.1, 2.2, 3.3, 4.4;
plutajuće fl = vtr [2];
cout << fl << '\n';

Izraz vraća konstantnu referencu na ith element vektora.

Dodjeljivanje vrijednosti s indeksom

Vrijednost se može dodijeliti nestalnom vektoru, kako slijedi:

vektor vtr 1.1, 2.2, 3.3, 4.4;
vtr [2] = 8.8;
cout << vtr[2] << '\n';

Izlaz je 8.8.

ime vektora.u (i)

“VektorName.at (i) "je poput" vectorName [i] ", ali" vectorName.at (i) ”je pouzdaniji. Sljedeći kod pokazuje kako treba koristiti ovaj vektor:

vektor vtr 1.1, 2.2, 3.3, 4.4;
plutati fl = vtr.na (2);
cout << fl << '\n';
at () je funkcija člana vektora.

ime vektora.na (i) const

“VektorName.at (i) const "je poput" vectorName [i] const ", ali" vectorName.at (i) const “je pouzdaniji. “VektorName.at (i) const "izvršava se umjesto" vectorName.at (i) ”kada je vektor konstantan vektor. Ovaj se vektor koristi u sljedećem kodu:

const vektor vtr 1.1, 2.2, 3.3, 4.4;
plutati fl = vtr.na (2);
cout << fl << '\n';
at () const je funkcija člana vektora.

Dodjeljivanje vrijednosti funkcijom at ()

Vrijednost se može dodijeliti nestalnom vektoru s funkcijom at (), kako slijedi:

vektor vtr 1.1, 2.2, 3.3, 4.4;
vtr.pri (2) = 8.8;
cout << vtr[2] << '\n';

Izlaz je 8.8.

Problem s potkriptiranjem

Problem s potkriptiranjem (indeksiranjem) je taj što se, ako je indeks izvan opsega, može vratiti nula ili se u vrijeme izvođenja može pojaviti pogreška.

ispred()

To vraća referencu na prvi element vektora bez uklanjanja elementa. Izlaz sljedećeg koda je 1.1.

vektor vtr 1.1, 2.2, 3.3, 4.4;
plutati fl = vtr.ispred();
cout << fl << '\n';

Element se ne uklanja iz vektora.

prednja () const

Kada vektorskoj konstrukciji prethodi const, umjesto "front () izvršava se izraz" front () const ".”To se koristi u sljedećem kodu:

const vektor vtr 1.1, 2.2, 3.3, 4.4;
plutati fl = vtr.ispred();
cout << fl << '\n';

Vraća se konstantna referenca. Element se ne uklanja iz vektora.

leđa()

To vraća referencu na zadnji element vektora bez uklanjanja elementa. Izlaz sljedećeg koda je 4.4.

vektor vtr 1.1, 2.2, 3.3, 4.4;
plutati fl = vtr.leđa();
cout << fl << '\n';

povratak () const

Kada vektorskoj konstrukciji prethodi const, umjesto "back () izvršava se izraz" back () const ".”To se koristi u sljedećem kodu:

const vektor vtr 1.1, 2.2, 3.3, 4.4;
plutati fl = vtr.leđa();
cout << fl << '\n';

Vraća se konstantna referenca. Element se ne uklanja iz vektora.

Pristup vektorskim podacima

data () noexcept; data () const noexcept;

Bilo koji od ovih vraća pokazivač tako da je [data (), data () + size ()) važeći raspon.

Ovo će biti detaljnije obrađeno kasnije u članku.

Povratak iteratora i vektora

Iterator je poput pokazivača, ali ima više funkcionalnosti od pokazivača.

begin () noexcept

Vraća iterator koji pokazuje na prvi element vektora, kao u sljedećem segmentu koda:

vektor vtr 1.1, 2.2, 3.3, 4.4;
vektor:: iterator iter = vtr.početi();
cout << *iter << '\n';

Izlaz je 1.1. Imajte na umu da je deklaracija koja prima iterator deklarirana. Iterator se dereferencira u povratnom izrazu kako bi se dobila vrijednost na isti način na koji se dereferencira pokazivač.

begin () const noexcept;

Vraća iterator koji pokazuje na prvi element vektora. Kada vektorskoj konstrukciji prethodi const, umjesto "begin () izvršava se izraz" begin () const ".”Pod ovim uvjetom, odgovarajući element u vektoru ne može se mijenjati. To se koristi u sljedećem kodu:

const vektor vtr 1.1, 2.2, 3.3, 4.4;
vektor:: const_iterator iter = vtr.početi();
cout << *iter << '\n';

Izlaz je 1.1. Imajte na umu da je ovaj put korišten "const_iterator" umjesto samo "iterator" za primanje vraćenog iteratora.

kraj () noexcept

Vraća iterator koji usmjerava neposredno iza zadnjeg elementa vektora. Razmotrite sljedeći segment koda:

vektor vtr 1.1, 2.2, 3.3, 4.4;
vektor:: iterator iter = vtr.kraj();
cout << *iter << '\n';

Izlaz je 0, što je besmisleno, jer nema konkretnog elementa izvan posljednjeg elementa.

end () const noexcept

Vraća iterator koji usmjerava neposredno iza zadnjeg elementa vektora. Kada je vektorskoj konstrukciji prethodilo "const", umjesto "end () izvršava se izraz" end () const ".”Razmotrite sljedeći segment koda:

const vektor vtr 1.1, 2.2, 3.3, 4.4;
vektor:: const_iterator iter = vtr.kraj();
cout << *iter << '\n';

Izlaz je 0. Imajte na umu da je ovaj put korišten "const_iterator" umjesto samo "iterator" za primanje vraćenog iteratora.

Obrnuta iteracija

Moguće je imati iterator koji se ponavlja od kraja do neposredno prije prvog elementa.

rbegin () ne izuzev

Vraća iterator koji pokazuje na posljednji element vektora, kao u sljedećem segmentu koda:

vektor vtr 1.1, 2.2, 3.3, 4.4;
vektor:: reverse_iterator rIter = vtr.rbegin ();
cout << *rIter << '\n';

Izlaz je 4.4.

Imajte na umu da je deklaracija koja prima obrnuti iterator deklarirana. Iterator se dereferencira u povratnom izrazu kako bi se dobila vrijednost na isti način na koji se dereferencira pokazivač.

rbegin () const noexcept;

Vraća iterator koji pokazuje na posljednji element vektora. Kada je vektorskoj konstrukciji prethodilo "const", umjesto "rbegin () izvršava se izraz" rbegin () const ".”Pod ovim uvjetom, odgovarajući element u vektoru ne može se mijenjati. Ova se značajka koristi u sljedećem kodu:

const vektor vtr 1.1, 2.2, 3.3, 4.4;
vektor:: const_reverse_iterator rIter = vtr.rbegin ();
cout << *rIter << '\n';

Izlaz je 4.4.

Imajte na umu da je const_reverse_iterator ovaj put korišten, umjesto samo reverse_iterator, za primanje vraćenog iteratora.

rend () noexcept

Vraća iterator koji pokazuje neposredno prije prvog elementa vektora. Razmotrite sljedeći segment koda:

vektor vtr 1.1, 2.2, 3.3, 4.4;
vektor:: reverse_iterator rIter = vtr.iskidati();
cout << *rIter << '\n';

Izlaz je 0, što je besmisleno, jer nema konkretnog elementa neposredno prije prvog elementa.

rend () const noexcept

Vraća iterator koji pokazuje neposredno prije prvog elementa vektora. Kada je vektorskoj konstrukciji prethodilo "const", umjesto "rend () izvršava se izraz" rend () const ".”Razmotrite sljedeći segment koda:

const vektor vtr 1.1, 2.2, 3.3, 4.4;
vektor:: const_reverse_iterator rIter = vtr.iskidati();
cout << *rIter << '\n';

Izlaz je 0.

Imajte na umu da je const_reverse_iterator ovaj put korišten, umjesto samo reverse_iterator, za primanje vraćenog iteratora.

Vektorski modifikatori

Modifikator koji modificira vektor može uzeti ili vratiti iterator.

a.mjesto (p, argumenti)

Umeće objekt tipa T konstruiran sa std :: forward(argumenti) ... prije str.

Pojedinosti - pogledajte kasnije

umetanje (iteratorPosition, vrijednost)

Umeta kopiju vrijednosti na poziciji iteratora vektora. Vraća iterator (položaj) u vektoru gdje je postavljena kopija. Sljedeći kod pokazuje gdje je postavljena vrijednost:

vektor vtr 10, 20, 30, 40;
vektor:: iterator iter = vtr.početi();
++iter;
++iter;
vtr.umetak (iter, 25);
cout << vtr[1] << " << vtr[2]<< '
' << vtr[3] << '\n';

Izlaz je: 20 25 30.

Imajte na umu da je iterator bio napredan (uvećan) baš poput pokazivača.

Popis inicijalizatora također se može umetnuti, kao što ilustrira sljedeći kod:

vektor vtr 10, 20, 30, 40;
vektor:: iterator iter = vtr.početi();
++iter;
++iter;
vtr.umetak (iter, 25, 28);
cout << vtr[1] << " << vtr[2]<< '
' << vtr[3]<< " << vtr[4] << '\n';

Izlaz je: 20 25 28 30.

izbrisati (položaj)

Uklanja element na položaju na koji ukazuje iterator, a zatim vraća položaj iteratora. Sljedeći kod to ilustrira:

vektor vtr 10, 20, 30, 40;
vektor:: iterator iter = vtr.početi();
++iter;
++iter;
vtr.izbrisati (iter);
cout << vtr[0] << " << vtr[1] << '
' << vtr[2]<< '\n';

Izlaz je: 10 20 40

push_back (t), push_back (rv)

Koristi se za dodavanje jednog elementa na kraj vektora. Upotrijebite push_back (t) na sljedeći način:

vektor vtr 1.1, 2.2, 3.3, 4.4;
vtr.push_back (5.5);
plutajuće fl = vtr [4];
cout << fl << '\n';

Izlaz je 5.5.

push_back (rv): - vidi kasnije.

pop_back ()

Uklanja posljednji element bez vraćanja. Veličina vektora smanjena je za 1. Sljedeći kod to ilustrira:

vektor vtr 1.1, 2.2, 3.3, 4.4;
vtr.pop_back ();
plutajuće sz = vtr.veličina();
cout << sz << '\n';

Izlaz je 3.

a.zamijeniti (b)

Dva se vektora mogu zamijeniti, kao što je prikazano u sljedećem segmentu koda:

vektor vtr1 1.1, 2.2, 3.3, 4.4;
vektor vtr2 10, 20;
vtr1.zamijeniti (vtr2);
cout << "vtr1: "<< vtr1[0] <<" "<< vtr1[1] <<"
"<< vtr1[2] <<" "<< vtr1[3] << '\n';
cout << "vtr2: "<< vtr2[0] <<" "<< vtr2[1] <<"
"<< vtr2[2] <<" "<< vtr2[3] << '\n';

Izlaz je:

vtr1: 10 20 0 0
vtr2: 1.1 2.2 3.3 4.4

Ako je potrebno, dužina vektora se povećava. Također, vrijednosti koje nisu imale zamjenu zamjenjuju se nekim zadanim vrijednostima.

čisto()

Uklanja sve elemente iz vektora, kao što ilustrira sljedeći segment koda:

vektor vtr 1.1, 2.2, 3.3, 4.4;
vtr.čisto();
cout << vtr.size() << '\n';

Izlaz je 0.

Operatori jednakosti i relacije za vektore

Operator ==

Vraća 1 za true ako su dva vektora jednake veličine i ako su odgovarajući elementi jednaki; u suprotnom, vraća 0 za false. Na primjer:

vektor U 1, 2, 3;
vektor V 4, 5, 6;
bool bl = U == V;
cout << bl << '\n';

Izlaz je 0.

The != Operator

Vraća 1 za true ako dva vektora nemaju jednaku veličinu i / ili odgovarajući elementi nisu jednaki; u suprotnom, vraća 0 za false. Na primjer:

vektor U 1, 2, 3;
vektor V 4, 5, 6;
bool bl = U!= V;
cout << bl << '\n';

Izlaz je 1.

The < Operator

Vraća 1 za true ako je prvi vektor početni podskup drugog vektora, s tim što su elementi dvaju jednakih dijelova isti i istim redoslijedom. Ako su oba vektora iste veličine i kreću se slijeva udesno i ako se u prvom vektoru nađe element koji je manji od odgovarajućeg elementa u drugom vektoru, tada će se 1 i dalje vratiti. U suprotnom, vraća se 0 za false. Na primjer:

vektor U 3, 1, 1;
vektor V 3, 2, 1;
bool bl = Ucout << bl << '\n';

Izlaz je 1. < does not include the case when the size and order are the same.

> Operator

Povrat !(U < V), where U is the first vector and V is the second vector, according to the above definitions.

The <= Operator

Vraća U <= V, where U is the first vector and V is the second vector, according to the above definitions.

Operator> =

Povrat !(U <= V), where U is the first vector and V is the second vector, according to the above definitions.

Zaključak

Vektor je primjer spremnika niza. Vektor je "bolji" oblik običnog niza i instanciran je iz klase. Vektori imaju metode koje se klasificiraju pod: konstrukcija i dodjela, kapacitet, pristup elementima, pristup podacima, iteratori, modifikatori i numerički preopterećeni operatori.

Postoje i drugi spremnici sljedova, nazvani list, forward_list i array. Ako zadatak uključuje česta umetanja i brisanja usred niza, tada treba koristiti popis ili prosljeđeni_popis. Ako zadatak uključuje česta umetanja i brisanja na početku ili na kraju slijeda, tada treba koristiti deque. Dakle, vektore treba koristiti samo kad takve vrste operacija nisu važne.

Besplatni i otvoreni kodni pokretački programi za razvoj Linux igara
Ovaj će članak pokriti popis besplatnih i open source pokretačkih igara koje se mogu koristiti za razvoj 2D i 3D igara na Linuxu. Brojni su takvi moto...
Vodič za Shadow of the Tomb Raider za Linux
Shadow of the Tomb Raider dvanaesti je dodatak seriji Tomb Raider - franšizi u akcijsko-avanturističkoj igri koju je stvorio Eidos Montreal. I kritiča...
Kako pojačati FPS u Linuxu?
FPS je kratica Okviri u sekundi. Zadatak FPS-a je mjerenje broja sličica u reprodukcijama video zapisa ili igranim izvedbama. Jednostavnim riječima, b...