Skip to content

Instantly share code, notes, and snippets.

@bunyamintamar
Last active April 18, 2022 05:54
Show Gist options
  • Select an option

  • Save bunyamintamar/5d433f863f43b52924d29e6af3e5bac5 to your computer and use it in GitHub Desktop.

Select an option

Save bunyamintamar/5d433f863f43b52924d29e6af3e5bac5 to your computer and use it in GitHub Desktop.
C++'ta Vektör Kullanımı

C++'ta Vektör Kullanımı


Vektörler boyutu program esnasında değiştirilebilen dinamik dizilerdir.
Her türden veri ya da nesne bu dinamik dizilerde tutulabilir.
C++'ta vektör işlemleri vector sınıfı ile yapılabilir. Bu sınıfı kullanabilmek
için aşağıdaki gibi vector sınıfını kodumuza ekliyoruz.

#include <vector>        // vector sınıfı için
                         // veya
#include <bits/stdc++.h> // tüm C++ standartlarını tek bir
                         // kütüphaneyle kullanmak için.

Vektör tanımlama aşağıda verilen örneklerdeki gibi tanımlanabilir.

Başlangıçta boyut vermeden vektör tanımlamak için:

// vector<veri_tipi> vector_adi;
vector<int> vect_int_item;

Bu tanımlamada başlangıçta herhangi bir boyut belirlenmemiştir.
Ancak vektöre eleman eklendikçe otomatik olarak boyutunu büyütecektir.

Başlangıçta belli bir boyut belirterek vektör 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 Vektör boyutu otomatik olarak büyümeye devam edecektir.

Başlangıçta belli bir boyut ve eleman/öğe değerini belirterek vektör
tanımlamak için:

vector<int> vect_int_item(10, 44);

Bu tanımlamada

  • başlangıç olarak 10 eleman kapasiteli bir boyut belirlenmiş
  • 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.

Başlangıçta bir liste ile de tanımlama yapılabilir.

vector<int> vect_int_item = {1, 2, 3, 4};

vector sınıfının metodları

Metod Açıklama
-size() Vektördeki eleman sayısını belirtilen bir değer döndürür.
-at() Parametre olarak belirtilen index değerine karşılık gelen elemanı döndürür
-empty() Vektörün boş olup olmadığını belirleyen bir bool durum döndürür.
-clear() Vektördeki tüm elemanları siler.
-capacity() Vektörün mevcut kapasitesini belirten bir değer döndürür.
-resize() Vektörün boyutunu değiştirir.
-max_size() Vektörün tutabileceği maksiumum eleman sayısını döndürür.
-begin() Vektorün başlangıç posizyonunu gösteren bir iterator döndürür.
-cbegin() Vektörün ilk elemanını işaret eden bir iterator döndürür. Döndürülen iterator const halindedir.
-end() Vektorün sonunu gösteren iterator döndürür.
-cend() Vektörün ilk elemanını işaret eden bir iterator döndürür. Döndürülen iterator const halindedir.
-front() Vektörün en başında yer alan elemanı döndürür.
-back() Vektörün en sonunda yer alan elemanı döndürür.
-push_back() Vektörün sonuna eleman ekler.
-pop_back() Vektörden son elemanı çıkarır/siler.
-data() Vektör içeriğini bir diziye yazar
-insert() Belirtilen bir pozisyona yeni eleman ekler.
-erase() Belirtilen bir elemanı Vektörden siler.
-operator [] Belirli bir elemana erişmek için kullanılır.
-operator () Vektöre başka bir vektor atamak/aktarmak için kullanılır. İşlem sonucunda eski veriler kaybolur.
-emplace() Belirtilen pozisyondan itibaren yeni eleman eklemek için kullanılır.
-emplace_back() Vektörün sonuna yeni eleman eklemek için kullanılır.
-assign() Vektore yeni değerler atamak için kullanılır. İşlem sonucunda eski veriler kaybolur.
-swap() Vektörler arasında elemanları değiş tokuş eder
-rbegin() Bu fonksiyon ters başlangıç anlamına gelir ve Vektörun son elemanını işaret eden bir reverse_iterator döndürür.
-rend() Bu fonksiyon ters uç anlamına gelir ve Vektörün ilk elemanı işaret eden bir reverse_iterator döndürür.
-crbegin() Vektörun son elemanını işaret eden bir const_reverse_iterator döndürür

Kullanım Örnekleri

Boyutu belirsiz tanımlama ve size() kullanımı

vector sınıfının metodları

int main()
{
    // Boyutu belirsiz
    vector<int>myVector;

    // Boyut: 0
    cout << "Boyut: " << myVector.size();

    return 0;
}

Boyutu belirli tanımlama ve size() kullanımı

vector sınıfının metodları

int main()
{
    // Boyutu belirli
    vector<int>myVector(10);

    // Boyut: 10
    cout << "Boyut: " << myVector.size();

    return 0;
}

Boyutu belirli tanımlama, ilk değer atama ve at() kullanımı

vector sınıfının metodları

int main()
{
    // Boyutu belirli, ilk değer atama
    vector<int>myVector(10, 3);

    // Boyut: 10
    cout << "Boyut: " << myVector.size() << endl;

    // Bütün değerler 3
    for(int i = 0; i < myVector.size(); i++)
        cout << "myVector.at(" << i << "): " << myVector.at(i) << endl;

    return 0;
}

Liste ile ilk değer atama

int main()
{
    // Liste ile ilk değer atama
    vector<int>myVector = {1, 2, 3};

    // Boyut: 3
    cout << "Boyut: " << myVector.size() << endl;

    for(int i = 0; i < myVector.size(); i++)
        cout << "myVector.at(" << i << "): " << myVector.at(i) << endl;

    return 0;
}

İlk değer atama ve empty() kullanımı

vector sınıfının metodları

int main()
{
    // Boyutu belirli, ilk değer atama
    vector<int>myVector(10, 3);

    // Boyut: 10
    cout << "Boyut: " << myVector.size() << endl;

    // DOLU
    cout << (myVector.empty() ? "BOŞ" : "DOLU");

    return 0;
}

Boyut belirsiz iken empty() kullanımı

vector sınıfının metodları

int main()
{
    // Boyutu belirsiz
    vector<int>myVector;

    // Boyut: 0
    cout << "Boyut: " << myVector.size() << endl;

    // BOŞ
    cout << (myVector.empty() ? "BOŞ" : "DOLU");

    return 0;
}

Boyut sıfır iken empty() kullanımı

vector sınıfının metodları

int main()
{
    // Boyutu belirli, ilk değer yok
    vector<int>myVector(0);

    // Boyut: 0
    cout << "Boyut: " << myVector.size() << endl;

    // BOŞ
    cout << (myVector.empty() ? "BOŞ" : "DOLU");

    return 0;
}

Boyut sıfır değilken ve hiçbir değer yokken empty() kullanımı

vector sınıfının metodları

int main()
{
    // Boyutu belirli, ilk değer yok
    vector<int>myVector(10);

    // Boyut: 10
    cout << "Boyut: " << myVector.size() << endl;

    // DOLU
    cout << (myVector.empty() ? "BOŞ" : "DOLU");

    return 0;
}

clear() kullanımı

vector sınıfının metodları

int main()
{
    // Boyutu belirli, ilk değer atama
    vector<int>myVector(10, 3);

    // Boyut: 10
    cout << "Boyut: " << myVector.size() << endl;

    // Bütün değerler 3
    for(int i = 0; i < myVector.size(); i++)
        cout << "myVector.at(" << i << "): " << myVector.at(i) << endl;
    
    myVector.clear();

    // Boyut: 0
    cout << "Boyut: " << myVector.size() << endl;

    // Döngüye girmez
    for(int i = 0; i < myVector.size(); i++)
        cout << "myVector.at(" << i << "): " << myVector.at(i) << endl;

    return 0;
}

capacity() kullanımı

vector sınıfının metodları

int main()
{
    // Boyutu belirli, ilk değer atama
    vector<int>myVector(10, 3);

    // Boyut: 10
    cout << "Boyut: " << myVector.size() << endl;

    // Kapasize: 10
    cout << "Kapasite: " << myVector.capacity() << endl;

    // Bütün değerler 3
    for(int i = 0; i < myVector.size(); i++)
        cout << "myVector.at(" << i << "): " << myVector.at(i) << endl;
    
    myVector.clear();

    // Boyut: 0
    cout << "Boyut: " << myVector.size() << endl;

    // Kapasize: 10
    cout << "Kapasite: " << myVector.capacity() << endl;

    // Döngüye girmez
    for(int i = 0; i < myVector.size(); i++)
        cout << "myVector.at(" << i << "): " << myVector.at(i) << endl;


    return 0;
}

resize() ve max_size() kullanımı

vector sınıfının metodları

int main()
{
    // Boyutu belirli, ilk değer atama
    vector<int>myVector(10, 3);

    // Boyut: 10
    cout << "Boyut: " << myVector.size() << endl;

    // Kapasize: 10
    cout << "Kapasite: " << myVector.capacity() << endl;

    myVector.resize(9);

    // Boyut: 9
    cout << "Boyut: " << myVector.size() << endl;

    // Kapasize: 10
    cout << "Kapasite: " << myVector.capacity() << endl;

    cout << "Maksimum boyut: " << myVector.max_size() << endl;

    return 0;
}

begin(), end() ve iterator kullanımı

vector sınıfının metodları

int main()
{
    // Boyutu belirsiz
    vector<int>myVector;

    for(int i = 0; i < 5; i++)    // 5 tane eleman ekle
        myVector.push_back(i);    // 1 2 3 4

    // iteratör tanımlama
    vector<int>::iterator myIterator;

    myIterator = myVector.begin();
    cout << "Baştaki eleman: " << *myIterator << endl;

    myIterator = myVector.end();
    cout << "Sondaki eleman: " << *(myIterator - 1) << endl;

    return 0;
}

front() ve back() kullanımı

vector sınıfının metodları

int main()
{
    // Boyutu belirsiz
    vector<int>myVector;

    for(int i = 0; i < 5; i++)    // 5 tane eleman ekle
        myVector.push_back(i);    // 1 2 3 4

    cout << "Baştaki eleman: " << myVector.front() << endl;
    cout << "Sondaki eleman: " << myVector.back() << endl;

    return 0;
}

push_back() ve pop_back() kullanımı

vector sınıfının metodları

int main()
{
    // Boyutu belirsiz
    vector<int>myVector;

    myVector.push_back(0); // 0. indekse 0 yaz
    myVector.push_back(1); // 1. indekse 1 yaz

    // Boyut: 2
    cout << "Boyut: " << myVector.size() << endl;

    // Kapasize: 2
    cout << "Kapasite: " << myVector.capacity() << endl << endl;

    for(int i = 2; i < 10; i++)   // 8 tane eleman ekle
        myVector.push_back(i);

    // Boyut: 10
    cout << "Boyut: " << myVector.size() << endl;

    // Kapasize: 16
    cout << "Kapasite: " << myVector.capacity() << endl << endl;

    for(int i = 10; i < 20; i++)  // 10 tane eleman ekle
        myVector.push_back(i);

    // Boyut: 20
    cout << "Boyut: " << myVector.size() << endl;

    // Kapasize: 32
    cout << "Kapasite: " << myVector.capacity() << endl << endl;

    for(int i = 20; i > 17; i--)  // son 3 elemanı sil
        myVector.pop_back();

    // Boyut: 17
    cout << "Boyut: " << myVector.size() << endl;

    // Kapasize: 32
    cout << "Kapasite: " << myVector.capacity() << endl << endl;

    cout << "Kapasitenin üstel olarak arttığına dikkat et" << endl;

    return 0;
}

data() kullanımı

vector sınıfının metodları

int main()
{
    // Boyutu belirsiz
    vector<int>myVector;

    for(int i = 0; i < 10; i++)   // 10 tane eleman ekle
        myVector.push_back(i);

    int *array = myVector.data();
    
    for(int i = 0; i < myVector.size(); i++)
        cout << *array++ << " ";

    return 0;
}

insert() ve erase() kullanımı

vector sınıfının metodları

int main()
{
    // Boyutu belirli, ilk değer atama
    vector<int>myVector(5, 1);

    // iteratör tanımlama
    vector<int>::iterator myIterator;

    for(int i = 0; i < myVector.size(); i++)
        cout << myVector.at(i) << " ";

    cout << endl;

    myIterator = myVector.begin();   // İlk elemanın yeri

    myVector.insert(myIterator, 2);  // Vektörün başına 2 ekle

    for(int i = 0; i < myVector.size(); i++)
        cout << myVector.at(i) << " ";

    cout << endl;

    myIterator = myVector.end();     // Son elemanın yeri

    myVector.insert(myIterator, 3);  // Vektörün başına 3 ekle

    for(int i = 0; i < myVector.size(); i++)
        cout << myVector.at(i) << " ";

    return 0;
}

operator [] ve operator () kullanımı

vector sınıfının metodları

int main()
{
    // Boyutu belirsiz
    vector<int>myVector;
    vector<int>yourVector;

    for(int i = 0; i < 5; i++) // 5 tane eleman ekle
        myVector.push_back(i); // 0 1 2 3 4

    for(int i = 0; i < myVector.size(); i++)
        cout << myVector[i] << " ";

    cout << endl;

    myVector[2] = 5;  // 2. indekse 5 rakamını ekle

    for(int i = 0; i < myVector.size(); i++)
        cout << myVector[i] << " ";

    cout << endl << "---" << endl;

    yourVector = myVector;

    for(int i = 0; i < yourVector.size(); i++)
        cout << yourVector[i] << " ";

    return 0;
}

emplace() ve emplace_back() kullanımı

vector sınıfının metodları

int main()
{
    // Boyutu belirsiz
    vector<int>myVector;

    myVector = {1, 2, 3, 4, 5};

    //for(int i = 0; i < 5; i++) // 5 tane eleman ekle
    //    myVector.push_back(i); // 0 1 2 3 4

    for(int i = 0; i < myVector.size(); i++)
        cout << myVector[i] << " ";

    cout << endl;

    myVector.emplace(myVector.begin() + 2, 10);  // 2. indeksten itibaren ekle

    for(int i = 0; i < myVector.size(); i++)
        cout << myVector[i] << " ";

    cout << endl;

    // 3. indeksten itibaren yeni değer ekle
    // eklenecek değerler: 30 40 50 60 70 80 90
    for(int i = 3; i < 10; i++)
        myVector.emplace(myVector.begin() + i, i * 10);

    // eklenme sırasına dikkat edin
    for(int i = 0; i < myVector.size(); i++)
        cout << myVector[i] << " ";

    cout << endl;

    // 3. indeksten itibaren yeni değer ekle
    // eklenecek değerler: 300 400 500 600 700 800 900
    for(int i = 3; i < 10; i++)
        myVector.emplace(myVector.begin() + 3, i * 100);

    // eklenme sırasına dikkat edin
    for(int i = 0; i < myVector.size(); i++)
        cout << myVector[i] << " ";

    return 0;
}

assign() kullanımı

vector sınıfının metodları

Sabit değerlerle assign() kullanımı

int main ()
{
    vector<int> myVector;
    myVector.assign(7, 100);
 
    cout << "Boyut: " << int(myVector.size()) << endl;

    cout << "Elemanlar:" << endl;

    for(int i = 0; i < myVector.size(); i++)
        cout << myVector[i] << endl;

    return 0;
}

Dizi ya da listeden alınan değerlerle assign() kullanımı

int main()
{
    vector<int> myVector;
    int a[] = {1, 2, 3, 4, 5, 6, 7};
 
    // Dizinin ilk iki elemanı al -> 1, 2
    myVector.assign(a, a + 2);
 
    cout << "Vektörün elemanları : ";

    for(int i = 0; i < myVector.size(); i++)
        cout << myVector[i] << " ";

    cout << "\nVektörün boyutu     : " << myVector.size() << endl;

    // Dizinin 2. indeksinden itibaren
    // 5. indekse kadar olan elemanları al -> 3, 4, 5
    myVector.assign(a + 2, a + 5);
 
    cout << "Vektörün elemanları : ";

    for(int i = 0; i < myVector.size(); i++)
        cout << myVector[i] << " ";

    cout << "\nVektörün boyutu     : " << myVector.size() << endl;

    cout << "Eski verilen ezildiğine dikkat et";
 
    return 0;
}

Vektörden alınan değerlerle assign() kullanımı

int main()
{
    vector<int> myVector = {1, 2, 3, 4, 5, 6, 7};
 
    cout << "Vektörün elemanları : ";

    for(int i = 0; i < myVector.size(); i++)
        cout << myVector[i] << " ";
 
    // Bu vektörün 2. elemanından 6. elemanına kadar olanları al
    // 3, 4, 5, 6
    myVector.assign(myVector.begin() + 2, myVector.begin() + 6);
 
    cout << "\nVektörün elemanları : ";

    for(int i = 0; i < myVector.size(); i++)
        cout << myVector[i] << " ";

    cout << "\nEski verilen ezildiğine dikkat et";

    return 0;
}

Initializer list'ten alınan değerlerle assign() kullanımı

int main()
{
    vector<int> myVector;
     
    // Vektöre bir liste ile atama yap
    myVector.assign({ 1, 2, 3 });
    cout << "Liste: ";

    for(int i = 0; i < myVector.size(); i++)
        cout << myVector[i] << " ";

    return 0;
}

swap() kullanımı

vector sınıfının metodları

int main()
{
    vector<int> myVector   = {1, 2, 3};
    vector<int> yourVector = {4, 5, 6, 7};
 
    // İki vektörün elemanlarını aralarında yer değiştir
    myVector.swap(yourVector);
 
    cout << "myVector   : ";
    for (int i = 0; i < myVector.size(); i++)
        cout << myVector[i] << " ";

    cout << "\nyourVector : ";
    for (int i = 0; i < yourVector.size(); i++)
        cout << yourVector[i] << " ";
 
    return 0;
}

rbegin() ve rend() kullanımı

vector sınıfının metodları

int main()
{
    vector<int> myVector;
    myVector.push_back(11);
    myVector.push_back(12);
    myVector.push_back(13);
    myVector.push_back(14);
    myVector.push_back(15);
 
    cout << "Vektörün elemanları ters sıralanadı: ";

    for(auto it = myVector.rbegin(); it != myVector.rend(); it++)
        cout << *it << " ";

    return 0;
}

Bünyamin TAMAR - Nisan 2022

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment