Özet - Iterator'lar
- C++ kursu
- Orta seviye
- Ders 64/116
- 5 dk
begin/end ve aritmetiği birleştirerek bir arama fonksiyonu yazarsın.
Özet - Iterator'lar
Bu grupta iterator'ın ne olduğunu, begin/end aralığını, beş kategoriyi, range-based for'u ve aritmetiği öğrendin. Şimdi bunları birleştirerek bir arama fonksiyonu yazacağız.
Arama, std::find ile başlar: auto it = std::find(v.begin(), v.end(), 30);. Bulunan iterator'ı indekse çevirmek için std::distance(v.begin(), it) kullanılır. Öğe bulunamazsa iterator v.end()'e eşit olur; bu durumu if (it != v.end()) ile ayırt ederiz.
Uygulama Ara ve indeksi yazdır
v = {10, 20, 30, 40} vektöründe std::find ile 30'u ara. std::distance(v.begin(), it) ile indeksini hesaplayıp std::cout ile yazdır.
Başlangıç kodu
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> v = {10, 20, 30, 40};
// std::find ile 30'u ara, std::distance ile indeksi yazdir
return 0;
}Örnek çözüm
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> v = {10, 20, 30, 40};
auto it = std::find(v.begin(), v.end(), 30);
std::cout << std::distance(v.begin(), it);
return 0;
}Beklenen çıktı
2
Uygulama Bulundu mesajı ekle
Önceki adımın std::find ve std::distance çağrılarını al. İndeksten sonra if (it != v.end()) ile "bulundu", aksi halde "yok" yazdır. İndeks ile mesajı ayrı satırlara koy.
Başlangıç kodu
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> v = {10, 20, 30, 40};
auto it = std::find(v.begin(), v.end(), 30);
std::cout << std::distance(v.begin(), it);
// bulunursa "bulundu", bulunmazsa "yok" yazdir
return 0;
}Örnek çözüm
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> v = {10, 20, 30, 40};
auto it = std::find(v.begin(), v.end(), 30);
std::cout << std::distance(v.begin(), it);
if (it != v.end()) {
std::cout << "\nbulundu";
} else {
std::cout << "\nyok";
}
return 0;
}Beklenen çıktı
2 bulundu
Iterator'ları özetle
Iterator'lar STL'in temel taşıdır. begin/end yarım açık aralığı tüm kapsayıcılar ve algoritmalar için ortaktır. Beş kategori (input, output, forward, bidirectional, random access) kapsayıcı türüne göre belirlenir.
Range-based for arka planda iterator kullanır. Rastgele erişim iterator'lar +n, -n, [] destekler. std::find ve std::distance ile arama yapıp indeks bulabilirsin. Bir sonraki grupta STL algoritmalarını ayrıntılı olarak öğreneceksin.
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Bir iterator'ı indekse dönüştürmek için ne kullanılır?
auto it = std::find(v.begin(), v.end(), 30);- std::count
- std::distance Doğru cevap
- std::sort
- std::copy
Açıklama: std::distance(begin, it) indeksi verir.
2 std::find çağrısını tamamla
auto it = std::____(v.begin(), v.end(), 30);
auto it = std::find(v.begin(), v.end(), 30);
Açıklama: std::find ile değer araması yapılır.