Iterator aritmetiği
- C++ kursu
- Orta seviye
- Ders 63/116
- 5 dk
Random access iterator'da aritmetik yapmayı öğrenirsin.
Iterator aritmetiği
Rastgele erişim iterator'lar işaretçi aritmetiği destekler. it + n n öğe ileriyi, it - n n öğe geriyi verir. it2 - it1 iki iterator arasındaki mesafeyi öğe sayısıyla verir. it[n] ise *(it + n) kısayoludur.
Bu işlemler yalnızca rastgele erişim iterator'da geçerlidir. İleri yönlü veya çift yönlü iterator'da + kullanırsan derleme hatası alırsın. std::vector ve std::array gibi kapsayıcılar bu aritmetiği destekler; std::list desteklemez.
std::distance
İki iterator arasındaki mesafeyi bulmanın iki yolu vardır. Rastgele erişim iterator'da it2 - it1 doğrudan mesafeyi verir. Diğer kategorilerde std::distance(it1, it2) kullanılır; bu, iterator'ı adım adım ilerleterek sayar.
Bir öğenin indeksini bulmak için std::distance(v.begin(), it) kullanılır. Örneğin auto it = std::find(v.begin(), v.end(), 30); sonrası std::distance(v.begin(), it) 30'un indeksini verir. Bu, iterator'ı indekse dönüştürmenin standart yoludur.
Uygulama Offset ile üçüncü öğeye eriş
v = {7, 14, 21, 28} vektöründe v.begin() ile iterator al ve *(it + 2) ile üçüncü öğeyi std::cout ile yazdır.
Başlangıç kodu
#include <iostream>
#include <vector>
int main() {
std::vector<int> v = {7, 14, 21, 28};
// begin() ile iterator al, offset ile eris
return 0;
}Örnek çözüm
#include <iostream>
#include <vector>
int main() {
std::vector<int> v = {7, 14, 21, 28};
auto it = v.begin();
std::cout << *(it + 2);
return 0;
}Beklenen çıktı
21
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 İşlemi sonucuna eşle
| Kavram | Anlamı |
|---|---|
it + 3 |
İleri offset |
it - 2 |
Geri offset |
it2 - it1 |
Mesafe |
it[n] |
n. öğe |
2 Hangi işlem yalnızca rastgele erişim iterator'da geçerlidir?
// bu islem her iterator'da calismaz- it + 5 ile offset Doğru cevap
- *it ile dereference
- ++it ile ilerletme
- it != end ile karşılaştırma
Açıklama: it + 5 yalnızca rastgele erişim iterator'da çalışır.
3 İndeksi hesapla
auto idx = std::____(v.begin(), it);
auto idx = std::distance(v.begin(), it);
Açıklama: std::distance iterator'ı indekse çevirir.