begin ve end
- C++ kursu
- Orta seviye
- Ders 60/116
- 5 dk
begin() ve end() ile iterator aralığını öğrenirsin.
begin ve end
Her STL kapsayıcısı iki üye fonksiyon sunar: begin() ilk öğeye iterator döndürür, end() ise son öğeden sonraki konumu (past-the-end) döndürür. Bu ikisi bir aralık tanımlar: [begin, end).
Bu aralık yarım açıktır: begin dahil, end hariç. Döngülerde it != v.end() kullanılır, < değil. Çünkü iterator'ların tüm kategorileri != destekler ama yalnızca rastgele erişim olanlar < destekler. Bu yüzden != daha taşınabilirdir.
Yarım açık aralık
[begin, end) aralığının yarım açık olması, boş kapsayıcılarla çalışmayı kolaylaştırır. Boş bir vektörde begin() == end() olur; döngü hiç çalışmaz. Bu, özel boşluk kontrolü gerektirmez.
end() asla dereference edilmez. Çünkü gösterdiği konum geçerli bir öğe değildir. Yalnızca karşılaştırma için kullanılır. Bu tasarım, STL algoritmalarının std::find, std::sort gibi hepsinde tutarlıdır: hepsi [begin, end) aralığı bekler. Bu yüzden bu aralık anlayışı STL'in temelidir.
Uygulama begin ve end ile yazdır
v = {5, 4, 3, 2, 1} vektörünü v.begin() ve v.end() kullanarak bir while döngüsünde yazdır. Her öğeden sonra boşluk bırak.
Başlangıç kodu
#include <iostream>
#include <vector>
int main() {
std::vector<int> v = {5, 4, 3, 2, 1};
// begin ve end ile yazdir
return 0;
}Örnek çözüm
#include <iostream>
#include <vector>
int main() {
std::vector<int> v = {5, 4, 3, 2, 1};
auto it = v.begin();
while (it != v.end()) {
std::cout << *it << " ";
++it;
}
return 0;
}Beklenen çıktı
5 4 3 2 1
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Döngü koşulunu tamamla
auto it = v.begin();
while (it != v.____()) {
++it;
}
auto it = v.begin();
while (it != v.end()) {
++it;
}
Açıklama: v.end() son öğeden sonraki konumu verir.
2 v.end() iterator'ı neyi temsil eder?
std::vector<int> v = {1, 2, 3};
auto e = v.end();- İlk öğeyi
- Son öğeden sonraki konumu Doğru cevap
- Son öğeyi
- Boş kapsayıcıyı
Açıklama: end() son öğeden sonraki konumdur, dereference edilmez.
3 Kavramı açıklamasıyla eşle
| Kavram | Anlamı |
|---|---|
v.begin() |
İlk öğeye iterator |
v.end() |
Son öğeden sonraki |
[begin, end) |
Yarım açık aralık |
begin == end |
Boş kapsayıcı |