Vektörler, eklenen ya da çıkarılan elemanlara göre boyutu dinamik olarak değişen bir dinamik dizidir. Bitişik dizi formunda olduğundan elemanlara erişim oldukça hızlıdır. Yeni eleman ekleme ve eleman silme durumunda ise bellekte yeni alan ayrırıp elemanları oraya taşıyarak işlem yapar. Bu yüzden ekleme ve silme işlemleri erişim işlemleri kadar hızlı değildir.
std::vector Bazı Üye Fonksiyonları ve Algoritma Karmaşıklıkları
Yapıcı Fonksiyonlar
vector v;
Boş vector oluşturma.
O(1)
vector v(n);
N elemanlı vector oluşurma.
O(n)
vector v(n, value);
N elemanlı vector oluşurma ve ilk değer ataması.
O(n)
vector v(begin, end);
Bir vector oluşturma ve öğeleri baştan sona kopyalama.
Maksimum eleman sayısını döndürür (Bellekte işgal edilen)
O(1)
Düzenleme Fonksiyonları
v.push_back(value);
value elemanını sona ekle.
O(1) (amortized)
v.insert(iterator, value);
value elemanını iteratörün gösterdiği yere ekle.
O(n)
v.pop_back();
Sondan eleman çıkart.
O(1)
v.erase(iterator);
İteratörün gösterdiği elemanı sil.
O(n)
v.erase(begin, end);
begin ile end arasındaki tüm elemanları sil.
O(n)
std::vector Oluşturma ve Eleman Ekleme
#include <vector> önişlemci direktifiyle vektör kullanmak için gerekli başlık dosyası eklenir. Ardından std::vector<typename> v; ile içerisinde typename tipinden (bu int, double, string olabilir) elemanlar barındıran vector nesnesi oluşturulur.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
#include<iostream> #include<vector> #include<algorithm> intmain() { // int değişkenler barındıran vector oluşturma ve ilk değer atama std::vector<int> v = {7, 5, 16, 8}; // iki tane değer ekleme v.push_back(25); v.push_back(13); // vector elemanlarını yazdır std::for_each(v.begin(),v.end(),[](constdecltype(v[0]) &a){std::cout<< a << ' ';}); }
Kod çıktısı: 7 5 16 8 25 13
std::vector Eleman Bulma, Silme ve Diğer İşlemler
Vector nesnesinde tıpkı diziler gibi döngü ile içerisinde dolaşarak istenilen eleman bulunabilir ya da değeri değiştirilebilir. Eleman silmek için ise erase(iterator) ya da yine aynı başlık dosyasında tanımlanmış ama vector sınıfına ait olmayan std::erase(std::vector, value)(C++20) fonksiyonları kullanılabilir.
std::for_each(v.begin(),v.end(),[](constdecltype(v[0]) &a){std::cout<< a << ' ';}); std::cout << '\n'; // ilk eleman siliniyor v.erase(v.begin()); std::for_each(v.begin(),v.end(),[](constdecltype(v[0]) &a){std::cout<< a << ' ';}); std::cout << '\n'; // cift sayilar siliniyor (C++11 ve sonrasi) for (auto it = v.begin(); it != v.end();) { (*it % 2 == 0) ? it = v.erase(it) : ++it; }
std::for_each(v.begin(),v.end(),[](constdecltype(v[0]) &a){std::cout<< a << ' ';}); std::cout << '\n'; }
Kod çıktısı:
1 2 3
0 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 3 5 7 9
Diğer std::vector Üye Fonksiyonları
shrink_to_fit(): Vector nesnesinden eleman silindiğinde silinen elemanların bellekte işgal ettiği alanı geri almak için kullanılır, bir nevi operator delete gibi iş görür.
rbegin() ve rend(): Vector nesnesinin ter çevrilmiş halinin begin() ve end() iteratörlerinin karşılığıdır. rbegin() ile end() ve rend() ile begin() aynı yerleri göstermektedir.
data(): Vector nesnesinin (eğer boş değilse) ilk elemanını gösteren pointer döndürür.
Comments