Iterator türleri
- C++ kursu
- Orta seviye
- Ders 61/116
- 5 dk
Input, output, forward, bidirectional ve random access iterator'ları öğrenirsin.
Iterator türleri
C++ beş iterator kategorisi tanımlar. Her kategori bir öncekinin üstüne yetenek ekler: input (okuma), output (yazma), forward (ileri yönlü, çok geçişli), bidirectional (çift yönlü, -- desteği) ve random access (rastgele erişim, + ve [] desteği).
Kapsayıcı türü,iterator kategorisini belirler. std::vector ve std::array rastgele erişim sağlar. std::list çift yönlü, std::forward_list ileri yönlü, std::istream giriş iterator'udur. Kategori ne kadar güçlüyse o kadar çok işlem desteklenir.
Rastgele erişim iterator
Rastgele erişim iterator, en güçlü kategoridir. İşaretçilerin desteklediği tüm işlemleri sağlar: it + n ile ileri offset, it - n ile geri offset, it2 - it1 ile mesafe ve it[n] ile n. öğeye erişim.
std::vector, std::array ve std::deque bu kategoriyi sağlar. Ayrıca ham işaretçiler de rastgele erişim iterator'udur. Bu yüzden std::sort gibi algoritmalar yalnızca rastgele erişim iterator ister; std::list üzerinde çalışmaz.
Uygulama Rastgele erişim ile öğeye eriş
v = {10, 20, 30, 40} 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 = {10, 20, 30, 40};
// begin() ile iterator al, indeksle eris
return 0;
}Örnek çözüm
#include <iostream>
#include <vector>
int main() {
std::vector<int> v = {10, 20, 30, 40};
auto it = v.begin();
std::cout << it[2];
return 0;
}Beklenen çıktı
30
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Kapsayıcıyı iterator kategorisiyle eşle
| Kavram | Anlamı |
|---|---|
std::vector |
Rastgele erişim |
std::list |
Çift yönlü |
std::forward_list |
İleri yönlü |
std::istream |
Giriş |
2 Üçüncü öğeye eriş
std::vector<int> v = {1, 2, 3};
auto it = v.begin();
std::cout << it[____];
std::vector<int> v = {1, 2, 3};
auto it = v.begin();
std::cout << it[2];
Açıklama: it[2] ile üçüncü öğeye (3) erişirsin.
3 Hangi kapsayıcı çift yönlü iterator sağlar?
// cift yonlu iterator: --it desteklenir- std::vector
- std::forward_list
- std::list Doğru cevap
- std::array
Açıklama: std::list çift yönlüdür, --it destekler.