BİLGİ SAYAMIYORUM beta

C++ ta bir vektörde (vector/liste) bir öğenin olup olmadığına nasıl bakılır, vector ve array in farkı nelerdir?

0

C++ yazmaya başladığımda ilk dikkatimi çeken şeylerden biri olmuştu, listelerin vector (vektör) olarak var oluyor olması. Tabii ki bu bir zorunluluk değil ancak std::array sadece C den kalan array in class olarak kullanılan hali. Bazı gerçekten küçük ve değişmez bir listeye ihtiyaç duyduğunuz durumlarda hızlı olabilse de boyutu sabit yani büyüyüp küçülemediği için yüksek ihtimalle kullanmak istediğiniz eleman listesi için uygun olmayacaktır. Öte yandan std::vector ise tam bir kanka, boyutu dinamik ve içeriğin kendisini dışarıdan seçebilen işaretçilere (pointer) sahip. 

Ek olarak bir vektörü (vector) bir diziye (array) nasıl çevirirsiniz ona da değineyim. Aslında baya kolay bir yolu var, bir vektör (vector) oluşturup, onun öğelerinin adresleriyle dizi (array) oluşturuyorum:

     std::vector<int> vekt;
     int* dizi = &vekt[0];

Peki bir öğenin bir vektörde (vector) olup olmadığına nasıl bakabilirsiniz? "algorithm" kütüphanesinden std::find ya da std::find_if ı kullanarak. Bu fonksiyon sonucu bool (true/false) olarak döndürür, o sebeple şöyle bir if/else ile gösterebilirim, mesela aramak istediğiniz şey "bulunacak" adında bir string, int ya da başka tipte bir veri:

     #include <algorithm>
     if ( std::find(vector.begin(), vector.end(), bulunacak) != vector.end() )
          bulduk();
     else
          yok();

Vektörlerin çalışma şekli itibariyle "bulunacak", başlangıçtan bitişe kontrol edilip kimseye eşit değilse ona göre yok() fonksiyonunu çalıştırıyor. Haklı olarak diyebilirsiniz ki, bu işlem gerçekten çok büyük vektörler (vector) için de uygun mudur? Aslında evet ancak, vektörü gerçeken işinize yarayan bir sorting (sıralama) algoritması ile düzenleyip - yani teknik olarak yararlı olması için işlem maliyetinin çok fazla olmaması gerekir - sonra üstünde binary_search, lower_bound, upper_bound gibi fonksiyonlar kullanmak da fazlasıyla işinize gelebilir.

BENZER 7

Kimse etkileşime girmemiş

ETİKETLER