C++ ile std::vector Kullanımı ve Örnekleri
C++ ile dinamik dizilerin farklı ve daha esnek bir kullanıma sahip alternatifi vector kütüphanesi, dizi elamanını belirtme zorunluluğumuz yok, dilediğimizde eleman ekleyip çıkartabiliyoruz; gayet güzel bir yapı, C# için List yapısını bilenlere biraz tanıdık gelecektir.
vector<int> arr; vector<int> arr2 = { 3,5,7,9 };
İlk satırdaki gibi, sadece tanımlayabiliriz, ya da ikinci satırdaki gibi içine elemanlar atabiliriz. Sonradan bir eleman eklemek istediğimizde bu eleman 4 olsun:
arr.push_back(4);
yazmamız yeterlidir. Dizideki bir elemana erişirken ki kuralımız standart dizi erişimi ile aynı :
arr[0] = 5; int c = arr[0];
Ancak dizide olmayan bir indekse erişmeye çalışmak hataya sebep oluyor, yani push_back ile bir eleman ataması yapmadan sadece diziyi tanımlayıp [0] indekse bir eleman atayamıyoruz. Dizi elemanına şu şekilde de ulaşmak mümkün, "eleman mevcut olmak zorunda" :
arr.at(0) = 1; cout << arr.at(0) << endl;
Dizinin ilk elemanına ya da son elemanına ulaşmak istersek :
cout << "first element " << arr.front() << endl; cout << "last element " << arr.back() << endl;
Bulk atama yöntemimiz var, dizeyi ilk verdiğimiz parametre sayısınca ikinci verdiğimiz parametre değeri ile dolduruyor, ama dikkat evvelinde var olan tüm elemanlar siliniyor :
arr.assign(7, 3);
7 elemanlı, her elemanı 3 olan nur topu gibi bir dizemiz oldu.
Dizideki toplam eleman sayısını öğrenmek istersek :
int count = arr2.size();
size fonksiyonu bize bu değeri döndürüyor. Dizideki tüm elemanları :
arr.clear();
fonksiyonu ile silebiliyoruz. Dizi boş mu diye kontrol etmek istersek
cout << "arr is Empty? " << arr.empty() << endl;
Aynı zamanda arr.Size() == 0 kontrolü de yapılabilir.
For kullanıcaz dersek, burada C# 'daki foreach yapısına benzer bir for düzeneği mevcut, kullanımı standart for 'dan biraz farklılık göstermekte :
for (int i : arr) cout << " " << i << endl;
Bir eleman silmek biraz daha zor gibi, vector sınıfına ait oluşturulan nesne türünden sınıfın iterator diye bir nesnesi var onu oluşturup erase fonksiyonuna göndermek gerekiyor.. ne diyorum :
vector<int>::iterator iFirst = arr.begin(); vector<int>::iterator iLast = arr.end(); arr.erase(iFirst); arr.erase(iLast);arr.erase(iFirst+1, iLast-1);
.begin() iterator tipinde dizinin ilk elemanını ifade ediyor, end son elemanını, sadece bunlardan birini erase fonksiyonuna yollayabildiğimiz gibi bir aralık da belirtebiliyoruz : ilk elemandan sonraki elemandan başla, son elemandan bir öncekine kadar sil gibi.
Dizeyi küçükten büyüğe sıralayalım dersek de bu iteratörlere ihtiyac duyuyoruz, ayrıca algorithm kütüphanesine de ihtiyacımız olacak :
#include <algorithm>
dedikten sonra
sort(arr.begin(), arr.end());
diyerek sıralamayı yapabiliriz..
Önceki Konu : C++ Dinamik Diziler
Hiç yorum yok:
Yorum Gönder