C++ Vektör(vector) Kullanımı
C++’da dinamik dizi kullanımı için “vector” sınıfı tercih edilebilir.
Bu sınıf her türden veri ya da nesne tutabilir.
Ayrıca dinamik yapısı itibariyle eleman yerleştirme veya silinme esnasında otomatik olarak dizi boyutu büyür.
vector sınıfını kullanmak için aşağıdaki kütüphanelerden birini include etmek gerekir.
#include <vector> //vector sınıfı için
Veya
#include <bits/stdc++.h> //tüm cpp standartlarını tek bir kütüphaneyle kullanmak için.
Vector tanımlama aşağıda verilen örneklerdeki gibi tanımlanabilir.
Başlangıçta boyut vermeden vector tanımlamak için:
vector<veri_tipi> vector_adi;
örn:
vector<int> vect_int_item;
Bu tanımlamada başlangıçta herhangi bir boyut belirlenmemiştir.
Ancak vectore eleman eklendikçe otomatik olarak boyutunu büyütecektir.
Başlangıçta belli bir boyut belirterek vector tanımlamak için:
vector<int> vect_int_item(10);
Bu tanımlamada başlangıç olarak 10 eleman kapasiteli bir boyut belirlenmiştir.Ancak bu boyut sınırlayıcı değildir.Dolayısıyla eleman eklendikçe vector boyutu otomatik olarak büyümeye devam edecektir.
Başlangıçta belli bir boyut ve eleman/öğre değerini belirterek vector tanımlamak için:
vector<int> vect_int_item(10,44);
Bu tanımlamada başlangıç olarak 10 eleman kapasiteli bir boyut belirlenmiş ve eleman değerleri 44 olarak verilmiştir.
Dolayısıyla 0–9 index değerleri ve arasındaki tüm eleman değerleri 44 çıktısı verir.
Vector sınıfı ile kullanılabilecek fonksiyonlar aşağıda yer almaktadır.
-at() = Parametre olarak belirtilen index değerine karşılık gelen elemanı döndürür. örn: vect_int_item.at(0); ilk elemanı döndürür.
-front() = Vectorün en başında yer alan elemanı döndürür.
-back() = Vectorün en sonunda yer alan elemanı döndürür.
-swap() = Vectorler arasında elemanları değiş tokuş eder.
Örnek kullanım:
vector<int> vect1(10,44);
vector<int> vect2(15); //15 elemanlı.
vect1.swap(vect2);
Bu kullanım sonucunda vect1 içeriği eleman olarak 0(sıfır) değerleri,vect2 içeriği elemanları ise 44 değerler yer alacaktır.
Ayrıca swap sonucunda vectorlere ait eski boyutlar da yeni elemanlara göre değişecektir. Yani vect2 boyutu 10 olarak değişmiştir.
-push_back() = Vectorün sonuna eleman ekler.
-pop_back() = Vectorden son elemanı çıkarır/siler.
-empty() = Vectorün boş olup olmadığını belirleyen bir bool durum döndürür.
-insert() = Belirtilen bir pozisyona yeni eleman ekler.
-erase() = Belirtilen bir elemanı vectorden siler.
-resize() = Vectorün boyutunu değiştirir.
-clear() = Vectordeki tüm elemanları siler.
-size() = Vectordeki eleman sayısını belirtilen bir değer döndürür.
-capacity() = Vectorün mevcut kapasitesini belirten bir değer döndürür.
-assign() = Vecktore yeni değerler atamak için kullanılır. En temel haliyle iki adet parametre alır. İlk parametre eleman sayısı,ikinci parametrede atanacak değer belirlenir.
Örnek kullanım:
vect.assign(10,”A”); //10 adet A değeri atanmıştır.
-operator=() = Vectore başka bir vektor atamak/aktarmak için kullanılır. Bu işlem sonucunda atama yapılan vector içindeki eski veriler kaybolur.
Örnek kullanım:
vector<int> vec1;
vec1.push_back(10);
vec1.push_back(20);
vec1.push_back(30);
///
vector<int> vec2;
vec2.operator =(vec1);
-operator[]() = Belirli bir elemana erişmek için kullanılır.
Örnek kullanım:
vector<int> vec1;
vec1.push_back(10);
vec1.push_back(20);
vec1.push_back(30);
for(int i=0;i<vec1.size();i++)
cout << vec1.operator[](i) << “ “;
Çıktı: 10 20 30
-begin() = Vektorün başlangıç posizyonunu gösteren bir iterator nesnesi döndürür.
-end() = Vektorün sonunu gösteren iterator nesnesi döndürür.
-emplace() = Belirtilen pozisyondan itibaren yeni eleman eklemek için kullanılır.
-emplace_back() = Vectorün sonuna yeni eleman eklemek için kullanılır.
-rbegin() = Bu fonksiyon ters başlangıç anlamına gelir ve vectorun son elemanını işaret eden bir reverse_iterator döndürür.
Yani vectorun son elemanı bu fonksiyonla ilk eleman olarak ele alınabilir.Dolayısıyla vectorü tersten itibaren işletmek istersek bu fonksiyon kolaylık sağlar.
-rend() = Bu fonksiyon ters uç anlamına gelir ve vectorün ilk elemanı işaret eden bir reverse_iterator döndürür.
rbegin() ve rend() Örnek kullanım:
vector<int> vec1;
vec1.push_back(10);
vec1.push_back(20);
vec1.push_back(30);
vector<int>::reverse_iterator rev_it;
for(rev_it=vec1.rbegin(); rev_it!=vec1.rend();*rev_it++)
cout << *rev_it << “ “;
Çıktı:30 20 10
-max_size() = Vectorün tutabileceği maksiumum eleman sayısını döndürür.
-cbegin() = Vectorün ilk elemanını işaret eden bir iterator döndürür. begin() ile arasındaki fark,begin() ile elde edilen iterator üzerinden değişiklik yapılabilirken,
cbegin() ile elde edilen iterator üzerinden herhangi bir değişiklik yapılamaz. Ve begin() normal iterator nesnesi döndürürken,cbegin() ise const_iterator nesnesi döndürür.
Kullanım şekli:
vector<int>::const_iterator citr = vec1.cbegin();
*citr = 11; //const olduğu için HATA!
-cend() = Vectorün ilk elemanını işaret eden bir iterator döndürür. Döndürülen iterator const halindedir.
-crbegin() = Bu fonksiyon vectorun son elemanını işaret eden bir const_reverse_iterator döndürür.
crbegin() ile rbegin() arasındaki tek fark;rbegin() iteratorü üzerinden değişiklik yapılabiliyorken,crbegin() iteratorü üzerindne herhangi bir değişiklik yapmak mümkün değildir.
-crend() = Bu fonksiyon vectorun ilk elemanını işaret eden bir const_reverse_iterator döndürür.
-data() = Vector içeriğini bir diziye yazar.
Örnek kullanım:
vector<int> vec1;
vec1.push_back(10);
vec1.push_back(20);
vec1.push_back(30);
int *arr = vec1.data();
for(int i= 0; i<vec1.size();i++)
cout << *arr++ << “ “;
Çıktı: 10 20 30
Vector ile ilgili küçük bir örnek aşağıdaki görselde veriliyor.