CodeBlanks Logo Icon CodeBlanks

begin ve end

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

main.cpp
#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

main.cpp
#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

Soru
auto it = v.begin();
while (it != v.____()) {
    ++it;
}
Cevap
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?

main.cpp
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ı

Orta seviye bölümündeki tüm dersler