CodeBlanks Logo Icon CodeBlanks

std::find

std::find ile arama yapmayı öğrenirsin.

std::find

std::find bir aralıkta değer arar. auto it = std::find(v.begin(), v.end(), 20); ile 20 değerini ararsın. Bulursa o öğeye iterator, bulamazsa v.end() döndürür.

Arama doğrusaldır (O(n)): baştan sona kadar her öğeyi kontrol eder. Değer bulunamazsa it == v.end() olur. Bu yüzden sonucu if (it != v.end()) ile kontrol edersin. std::find her iterator kategorisinde çalışır; std::vector, std::list hatta ham işaretçilerle bile kullanılabilir.

Sonucu kontrol etme

std::find bir iterator döndürür. Değer bulunmuşsa bu iterator geçerli bir öğeyi gösterir; bulunmamışsa v.end()'e eşittir. Bu yüzden if (it != v.end()) ile durumu ayırt ederiz.

Bulunan öğenin değerini *it ile okursun. İndeksini std::distance(v.begin(), it) ile hesaplarsın. Bu iki yaklaşım, iterator'ı hem değere hem indekse dönüştürmenin standart yoludur. Arama başarısızsa *it kullanılmaz; çünkü end() dereference edilmez.

Uygulama Değeri ara ve mesaj yazdır

v = {10, 20, 30} vektöründe std::find ile 20'yi ara. Bulunursa "bulundu", bulunmazsa "yok" yazdır. it != v.end() ile durumu kontrol et.

Başlangıç kodu

main.cpp
#include <iostream>
#include <vector>
#include <algorithm>

int main() {
    std::vector<int> v = {10, 20, 30};
    // std::find ile 20'yi ara, sonucu yazdır
    return 0;
}

Örnek çözüm

main.cpp
#include <iostream>
#include <vector>
#include <algorithm>

int main() {
    std::vector<int> v = {10, 20, 30};
    auto it = std::find(v.begin(), v.end(), 20);
    if (it != v.end()) {
        std::cout << "bulundu";
    } else {
        std::cout << "yok";
    }
    return 0;
}

Beklenen çıktı

bulundu

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 find çağrısını tamamla

Soru
auto it = std::____(v.begin(), v.end(), 20);
Cevap
auto it = std::find(v.begin(), v.end(), 20);

Açıklama: find yazılır: std::find(v.begin(), v.end(), 20); ile arama yapılır.

2 std::find öğeyi bulamazsa ne döndürür?

main.cpp
auto it = std::find(v.begin(), v.end(), 99);
  • v.end() iterator'ı Doğru cevap
  • 0
  • -1
  • nullptr

Açıklama: Bulunamayınca end() iterator'ı döner.

3 İfadeyi anlamıyla eşle

Kavram Anlamı
std::find(begin, end, v) Değer arama
it != v.end() Bulundu koşulu
*it Bulunan öğe
std::distance(begin, it) İndeks hesabı

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