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:
- Konteyner üzerinde gezinmek
- Elemanları okumak veya değiştirmek
- STL algoritmalarına (sort, find, count…) erişim sağlamak
Ö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.
- Input Iterator – sadece okuma
- Output Iterator – sadece yazma
- Forward Iterator – ileri yön
- Bidirectional Iterator – ileri + geri
- Random Access Iterator – rastgele erişim (pointer benzeri)
Ö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:
- begin() → ilk elemana işaret eder
- end() → son elemandan bir sonraki konuma işaret eder
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ı
- Konteyner türünden bağımsız çalışma
- Daha okunabilir kod
- STL algoritmalarıyla tam uyumluluk
- Verimli bellek erişimi
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
C++ algorithm Kütüphanesi: sort, find, count
C++ algorithm kütüphanesini öğrenin. sort, find, count ve diğer STL algoritmalarıyla veri işleme işlemlerini kolaylaştırın.
C++ Döngüler: for, while, do-while
C++ döngülerini öğrenin. for, while ve do-while yapılarıyla tekrar eden işlemleri ve program akışını kontrol etmeyi keşfedin.
C++ list ve deque ile Sıralı Veri Yapıları
C++ std::list ve std::deque kullanımını öğrenin. Sıralı veri yapıları, performans farkları ve kullanım senaryoları örneklerle anlatılıyor.
C++ map ve unordered_map ile Anahtar-Değer Yapıları
C++ std::map ve std::unordered_map kullanımını öğrenin. Anahtar-değer yapıları, arama performansı ve kullanım senaryolarını örneklerle keşfedin.
C++ pair, tuple ve Structured Binding
C++'ta pair, tuple ve Structured Binding kullanımını öğrenin. Birden fazla değeri yönetme ve modern C++ tekniklerini örneklerle keşfedin.
C++ set ve multiset ile Eşsiz Elemanlar
C++ std::set ve std::multiset kullanımını öğrenin. Benzersiz elemanlar, sıralı veri yapıları ve performans farkları örneklerle anlatılıyor.
C++ Standard Library'ye Genel Bakış
C++ Standard Library'yi öğrenin. STL bileşenleri, konteynerler, algoritmalar ve modern C++ geliştirmede temel kütüphaneleri keşfedin.
C++ vector Kullanımı ve Özellikleri
C++ std::vector kullanımını öğrenin. Dinamik diziler, eleman ekleme, silme ve erişim işlemlerini pratik örneklerle keşfedin.