Yükleniyor...

C++ İteratör Kavramı ve STL'de Kullanımı

C++'ta iterator kavramını ve STL konteynerleriyle kullanımını öğrenin. Veri dolaşımı, algoritmalar ve modern STL örnekleriyle keşfedin.

C++ Standard Library (STL), veri yapıları üzerinde dolaşmayı (iterate etmeyi) sağlayan güçlü bir soyutlama olan iterator kavramına dayanır. İteratörler, STL konteynerlerinin (vector, list, map, set…) temel parçasıdır ve bir öğeden diğerine ilerlemeyi standart bir şekilde mümkün kılar. Bu makalede iteratör türleri, temel kullanım şekilleri ve STL fonksiyonlarıyla ilişkisi detaylı olarak açıklanmaktadır.


1) İteratör Nedir?

İteratör, bir konteynerdeki elemanlara erişmek için kullanılan bir nesnedir. Bir pointer (işaretçi) gibidir ancak STL tarafından soyutlanmıştır.

İteratörlerin ana işlevleri:

Örnek


#include <vector>
#include <iostream>
using namespace std;

int main() {
    vector<int> v = {10, 20, 30};

    vector<int>::iterator it = v.begin();

    cout << *it; // 10
}

2) İteratör Türleri

STL’de farklı konteynerler farklı iteratör türlerini destekler.

Örneğin: vector → random access iterator, list → bidirectional iterator, map → bidirectional iterator.


3) begin() ve end() Fonksiyonları

STL konteynerleri aşağıdaki iki önemli fonksiyonu sağlar:


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

for (auto it = v.begin(); it != v.end(); ++it) {
    cout << *it << " ";
}

4) Const İteratör (const_iterator)

Elemanları değiştirmeyen, sadece okuma amaçlı kullanılan iteratör türüdür.


vector<int> v = {10, 20, 30};

vector<int>::const_iterator it = v.begin();

// *it = 50; // HATA: const_iterator değiştirmeye izin vermez

cout << *it;

5) Reverse Iterator (rbegin & rend)

Konteyner üzerinde tersten dolaşmak için kullanılır.


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

for (auto it = v.rbegin(); it != v.rend(); ++it) {
    cout << *it << " ";
}
// Çıktı: 3 2 1

6) İteratörlerle Eleman Değiştirme


vector<int> v = {10, 20, 30};

for (auto it = v.begin(); it != v.end(); ++it) {
    *it *= 2;
}

for (int x : v)
    cout << x << " ";
// Çıktı: 20 40 60

7) İteratörler ve STL Algoritmaları

STL algoritmalarının tamamı iteratörlerle çalışır.

sort ile kullanım


#include <algorithm>

vector<int> v = {50, 20, 10};

sort(v.begin(), v.end());

find ile kullanım


auto it = find(v.begin(), v.end(), 20);

count ile kullanım


int c = count(v.begin(), v.end(), 10);

8) map ve set Üzerinde İterasyon


#include <map>
#include <iostream>
using namespace std;

int main() {
    map<string, int> ages = {
        {"Ali", 25},
        {"Ayse", 30},
        {"Mehmet", 28}
    };

    for (auto it = ages.begin(); it != ages.end(); ++it) {
        cout << it->first << " : " << it->second << endl;
    }
}

9) İteratörler ile Silme İşlemleri

İteratörler belirli bir elemanı silmek için kullanılabilir.


vector<int> v = {10, 20, 30, 40};

auto it = find(v.begin(), v.end(), 20);

if (it != v.end())
    v.erase(it);

10) İteratör Kullanmanın Avantajları


11) TL;DR

  • İteratör: konteynerdeki elemanlara erişim için kullanılan standart yapı
  • begin/end → ileri doğru iterasyon
  • rbegin/rend → geri doğru iterasyon
  • const_iterator → sadece okuma
  • STL algoritmaları tamamen iteratörlerle çalışır
  • Tüm örnekler Visual Studio 2022 ve GCC ile uyumludur

İlişkili Makaleler