C++
Özet - Iterator'lar
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.
Örnek çözümü göster
#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;
}
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.
Örnek çözümü göster
#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;
}
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.
Kendini test et
-
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
- std::sort
- std::copy
Cevabı göster
std::distance — std::distance(begin, it) indeksi verir.
-
std::find çağrısını tamamla
auto it = std::____(v.begin(), v.end(), 30);
Cevabı göster
auto it = std::find(v.begin(), v.end(), 30);
Sıradaki ders: Model tasarımı