cpp std vector kullanımı etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
cpp std vector kullanımı etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

C++ Dersleri | std::vector ile Dinamik Diziler

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

Türksat Saat Kanalı ve IRIG-B Time Code

Türksat Saat Kanalından Saat Bilgisi Nasıl Alınır? Uyduda kanalları dolaşırken, şu Türksat Saat kanalı hep dikkatimi çekmiştir. Özellikle  S...