# 4.6 Deque (Çift Uçlu Kuyruk)

C++ dilinde deque (double-ended queue), hem başından hem de sonundan eleman ekleyip çıkarabileceğiniz bir veri yapısıdır. Deque'ler, hem FIFO (First In, First Out - İlk Giren İlk Çıkar) hem de LIFO (Last In, First Out - Son Giren İlk Çıkar) mantığına göre çalışabilir. Bu özellikleri sayesinde, çeşitli uygulamalarda esneklik sağlar.

#### Deque'in Temel Özellikleri

1. **Çift Uçlu Yapı**: Elemanlar, hem ön (front) hem de arka (back) uçlardan eklenip çıkarılabilir.
2. **Dinamik Boyutlandırma**: Deque, dinamik olarak boyutlandırılabilir. Yani, eleman ekledikçe boyutu otomatik olarak büyür.
3. **Rastgele Erişim**: Deque, elemanlara rastgele erişim sağlar, bu da belirli bir indeksteki elemana doğrudan erişim imkanı sunar.

#### Deque Kullanımı

C++'ta deque kullanmak için `#include <deque>` kütüphanesini dahil etmeniz gerekmektedir. Aşağıda deque'in temel kullanımına dair örnekler bulunmaktadır.

**Deque Oluşturma ve Eleman Ekleme**

```cpp
#include <iostream>
#include <deque>

int main() {
    // Deque oluşturma
    std::deque<int> deq;

    // Eleman ekleme
    deq.push_back(10); // Arka uca ekleme
    deq.push_front(20); // Ön uca ekleme
    deq.push_back(30);

    // Deque elemanlarını yazdırma
    std::cout << "Deque elemanları: ";
    for (const int& elem : deq) {
        std::cout << elem << " ";
    }
    std::cout << std::endl;

    return 0;
}
```

**Eleman Çıkarma**

Deque'den eleman çıkarmak için `pop_back()` ve `pop_front()` fonksiyonları kullanılır.

```cpp
#include <iostream>
#include <deque>

int main() {
    // Deque oluşturma
    std::deque<int> deq;
    deq.push_back(10);
    deq.push_back(20);
    deq.push_back(30);

    // Deque'den eleman çıkarma
    std::cout << "Deque'den çıkarılan ön eleman: " << deq.front() << std::endl;
    deq.pop_front(); // Ön uçtan çıkar

    std::cout << "Deque'den çıkarılan arka eleman: " << deq.back() << std::endl;
    deq.pop_back(); // Arka uçtan çıkar

    std::cout << "Kalan elemanlar: ";
    for (const int& elem : deq) {
        std::cout << elem << " ";
    }
    std::cout << std::endl;

    return 0;
}
```

**Rastgele Erişim**

Deque'deki elemanlara indeks numarasıyla erişim mümkündür.

```cpp
#include <iostream>
#include <deque>

int main() {
    // Deque oluşturma
    std::deque<int> deq = {10, 20, 30, 40};

    // Rastgele erişim
    std::cout << "2. indeksdeki eleman: " << deq[2] << std::endl; // 30

    return 0;
}
```

#### Sonuç

C++ Deque, esnekliği sayesinde birçok uygulama için yararlı bir veri yapısıdır. Hem ön hem de arka uçlardan eleman ekleyip çıkarabilme özelliği, onu özellikle dinamik veri yapıları için uygun hale getirir.
