std::find
- C++ kursu
- Orta seviye
- Ders 71/116
- 5 dk
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
#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
#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
auto it = std::____(v.begin(), v.end(), 20);
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?
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ı |