C++, yeni başlayan biri olarak karşılaşabileceğiniz en güçlü ve göz korkutucu programlama dillerinden biridir. Nedeni oldukça basit. İstenilen çıktıyı elde etmek için çok fazla kod gerektirir. Standart şablon kitaplığı veya STL, bu bilmeceyi çözmenize yardımcı olabilir.
Sıralama ve arama gibi işlevler için kod yazarken harcanan zaman ve emek göz önüne alındığında STL, tüm bu işlemleri tek bir kod satırı ile gerçekleştirmenize yardımcı olabilir. Bu kütüphane, problem çözme ve teknik görüşme hazırlığı için son derece yararlı olabilir.
Standart Şablon Kitaplığı Nedir?
Standart Şablon Kitaplığı veya STL, önceden oluşturulmuş işlevlerden ve kapsayıcılardan oluşan bir C++ kitaplığıdır. Vektörler, yığınlar, kuyruklar gibi yaygın veri yapıları için bazı belirgin şablon sınıfları ve programlamayı kolaylaştırmak için ikili arama gibi bazı kullanışlı algoritmik işlevler içerir.
C++'daki Standart Şablon Kitaplığı dört bileşenden oluşur:
- algoritmalar
- Konteynerler
- Fonksiyonlar
- yineleyiciler
Algoritmalara ve kapsayıcılara daha derinlemesine bakalım, çünkü bunlar STL'nin en sık kullanılan bileşenleridir.
STL'de Algoritmalar
başlık dosyası, manuel olarak kodlamak yerine kullanılabilecek birkaç algoritmik işlevden oluşan STL'nin bir parçasıdır. Dahil edilen algoritmalardan bazıları, son derece yararlı olan ikili arama, sıralama ve tersine çevirmedir.
Başlamak için, içe aktarmanız gerekir. C++ dosyanızdaki başlık. Sözdizimi aşağıdaki gibidir:
#Dahil etmek
Yaklaşan yöntemler için, örnek olarak {6, 2, 9, 1, 4} değerlerine sahip bir dizi değişkenini düşünün.
int dizi[] = {6, 2, 9, 1, 4};
çeşit()
çeşit() işlevi, belirtilen veri yapısı içindeki tüm öğeleri artan düzende sıralamanıza yardımcı olur. Bu işlev iki parametre alır: başlangıç yineleyici ve bitiş yineleyici.
İlişkili: Birleştirme Sıralama Algoritmasına Giriş
Sözdizimi:
sıralama (start_iterator, end_iterator);
İşte hızlı bir örnek:
sırala (dizi, dizi+5);
için (int i = 0; ben < 5; ben++) {
cout << dizi[i] << " ";
}
Çıktı:
1 2 4 6 9
tersine çevirmek()
tersine çevirmek() işlevi, belirtilen veri yapısındaki öğelerin sırasını tersine çevirir. İki parametre kabul eder: başlangıç yineleyici ve bitiş yineleyici.
Sözdizimi:
ters (start_iterator, end_iterator);
Yukarıdaki yöntem için kısa bir örnek:
ters (dizi, dizi+5);
için (int i = 0; ben < 5; ben++) {
cout << dizi[i] << " ";
}
Çıktı:
4 1 9 2 6
*min_element() ve *max_element()
Fonksiyonlar *max_element() ve *min_element() sırasıyla belirtilen veri yapısı içindeki maksimum ve minimum değeri döndürür. Bu işlevlerin her ikisi de iki bağımsız değişkeni kabul eder: başlangıç yineleyici ve bitiş yineleyici.
Sözdizimi:
*max_element (start_iterator, end_iterator);
*min_element (start_iterator, end_iterator);
Bu işlevlerin örnek dizide çağrıldığında hangi değerleri döndürdüğünü bulalım:
cout << *max_element (dizi, dizi+5) << endl;
cout << *min_element (dizi, dizi+5) << endl;
Çıktı:
9
1
Ikili arama()
Ikili arama() Yöntem, belirtilen değerin veri yapısı içinde bulunup bulunmadığını bulmak için kullanılır. Üç bağımsız değişkeni kabul eder: başlangıç yineleyici, bitiş yineleyici ve bulmak istediğiniz değer.
İkili arama yalnızca sıralanmış veri yapılarında çalışır. Bu nedenle, aramanız gerekecek çeşit() yöntemden önce ilk Ikili arama() yöntem.
Sözdizimi:
ikili_search (start_iterator, end_iterator, value_to_find)
İşte bu yöntemin bir gösterimi:
sırala (dizi, dizi+5);
ikili_search (dizi, dizi+5, 2)? cout << "Öğe bulundu": cout << "Öğe bulunamadı";
ikili_search (dizi, dizi+5, 7)? cout << "Öğe bulundu": cout << "Öğe bulunamadı";
Çıktı:
Öğe bulundu
Öğe bulunamadı
Miktar()
Miktar() yöntem, veri yapısı içinde belirtilen değerin oluşum sayısını döndürür. Üç bağımsız değişken alır: başlangıç yineleyici, bitiş yineleyici ve sayılacak değer.
Sözdizimi:
saymak (start_iterator, end_iterator, value_to_count);
İşte bu yöntemin bir örneği:
cout << say (dizi, dizi+5, 2) << endl;
Çıktı:
1
STL'deki konteynerler
Kapsayıcılar, nesneleri ve verileri depolayan veri yapılarıdır. Vektörler, listeler, yığınlar, sıralar, kümeler ve haritalar, belirtilen ilkel veri türüne göre veri depolayan örneklerden bazılarıdır. Bu kapsayıcıları, ilgili başlıklarını C++ dosyasına içe aktararak kullanabilirsiniz.
Container değişkenini başlatırken, aşağıdaki gibi ilkel verilerden bahsetmeniz gerekir. int, karakter, dize içinde <> parantez.
Bu kaplardan bazılarını daha ayrıntılı olarak inceleyelim:
Vektör
Vektörler, yeniden boyutlandırılabilir ve birlikte çalışmak için esnek olan dinamik dizilerdir. Vektöre bir öğe eklediğinizde veya vektörden bir öğe sildiğinizde, vektörün boyutunu otomatik olarak ayarlar. Bu şuna benzer ArrayList veri yapısı Java'da.
Sözdizimi:
#Dahil etmek
vektör değişken ismi;
İşte bazı önemli vektör yöntemleri:
- push_back (değer): Bu yöntem, verileri vektöre ekler.
- pop_back(): Bu yöntem, vektörden son öğeyi kaldırır.
- ekle (dizin, değer): Bu yöntem, belirtilen konumdaki öğeden önce yeni öğeler ekler.
- boyut(): Bu yöntem, vektörün boyutunu döndürür.
- boş(): Bu yöntem vektörün boş olup olmadığını kontrol eder.
- ön(): Bu yöntem, vektörün ilk değerini döndürür.
- geri(): geri yöntemi, vektörün son değerini döndürür.
- (dizin) adresinde: Bu yöntem, belirtilen konumdaki değeri döndürür.
- sil (dizin): silme yöntemi, verilen dizinden öğeleri kaldırır.
- açık(): Bu yöntem vektördeki tüm öğeleri temizler.
vektör < int > v = { 23, 12, 56, 10 };
v.push_back (5);
v.push_back (25);
v.pop_back();
auto i = v.insert (v.begin() + 1, 7);
cout << "Verilen vektörün boyutu" << v.size() << endl;
if (v.empty()) {
cout << "Vektör boş" << endl;
} Başka {
cout << "Vektör boş değil" << endl;
}
cout << "İlk konumdaki eleman " << v.front() << endl;
cout << "Son konumdaki eleman " << v.back() << endl;
cout << "Belirtilen konumdaki eleman " << v.at (4) << endl;
v.silme (v.begin() + 1);
için (int i = 0; ben < v.boyut(); ben++) {
cout << v[i] << " ";
}
Çıktı:
Verilen vektörün boyutu 6
Vektör boş değil
İlk konumdaki eleman 23'tür
Son konumdaki eleman 5'tir.
Verilen konumdaki eleman 10'dur
23 12 56 10 5
sıra
Kuyruk veri yapısında, elemanlar arkadan eklenir ve önden silinir. Bu nedenle, FIFO ("ilk giren ilk çıkar") yaklaşımını takip eder.
Sözdizimi:
#Dahil etmek
sıra değişken ismi;
İşte bazı önemli kuyruk yöntemleri:
- itin (değer): Bu yöntem, kuyruğa öğeler ekler.
- pop(): Bu yöntem, kuyruğun ilk öğesini siler.
- boyut(): Bu yöntem, kuyruğun boyutunu döndürür.
- ön(): Bu yöntem, kuyruğun ilk öğesini döndürür.
- geri(): Bu yöntem, kuyruğun son öğesini döndürür.
kuyruk < int > q;
q.push (30);
q.push (40);
q.push (50);
q.push (60);
q.push (70);
cout << "İlk öğe " << q.front() << endl;
cout << "Son eleman " << q.back() << endl;
cout << "Kuyruğun boyutu " << q.size() << endl;
q.pop();
cout << "Kuyruğun tüm öğelerini yazdırma" << endl;
while (!q.empty()) {
cout << q.front() << " ";
q.pop();
}
Çıktı:
İlk eleman 30
son eleman 70
Kuyruğun boyutu 5
Kuyruğun tüm öğelerini yazdırma
40 50 60 70
yığın
Yığın kapsayıcıları LIFO yöntemiyle çalışır. LIFO, "son giren ilk çıkar" anlamına gelir. Veriler aynı uçtan itilir ve açılır.
Sözdizimi:
#Dahil etmek
yığın değişken ismi;
İşte bazı önemli yığın yöntemleri:
- itin (değer): Bu yöntem, öğeyi yığına iter.
- pop(): Bu yöntem yığının üst öğesini siler.
- üst(): Bu yöntem, yığına girilen son öğenin değerini döndürür.
- boyut(): Bu yöntem yığının boyutunu döndürür.
- boş(): Bu yöntem yığının boş olup olmadığını kontrol eder.
yığın < int > s;
s.itme (30);
s.itme (40);
s.push (50);
s.push (60);
cout << "Yığının en üstünde " << s.top() << endl;
s.pop();
cout << "Pop işlemi gerçekleştirdikten sonra yığının üstü: " << s.top() << endl;
cout << "Yığının tüm öğeleri yazdırılıyor" << endl;
while (!s.empty()) {
cout << s.top() << " ";
s.pop();
}
Çıktı:
Yığının üst kısmı 60 içerir
Pop işlemi gerçekleştirdikten sonra yığının üstü: 50
Yığının tüm öğelerini yazdırma
50 40 30
Ayarlamak
Küme kapları benzersiz değerleri tutmak için kullanılır ve öğenin değeri kümeye eklendikten sonra değiştirilemez. Kümedeki tüm öğeler sıralı bir şekilde saklanır. Set kapsayıcı şuna benzer: Python'da veri yapısını ayarla.
Sözdizimi:
#Dahil etmek
Ayarlamak değişken ismi;
İşte bazı önemli küme yöntemleri:
- eklemek (değer): Bu yöntem, kümeye öğeler ekler.
- başla(): Bu yöntem, yineleyiciyi kümenin ilk öğesine döndürür.
- son(): Bu yöntem, yineleyiciyi kümenin son öğesine döndürür.
- boyut(): Bu yöntem, kümenin boyutunu döndürür.
- boş(): Bu metot, kümenin boş olup olmadığını kontrol eder.
- bul (değer): Bu yöntem, yineleyiciyi parametrede geçirilen öğeye döndürür. Öğe bulunamazsa, bu işlev yineleyiciyi kümenin sonuna döndürür.
- silmek (değer): Bu yöntem, belirtilen öğeyi kümeden siler.
< int > s ayarlayın;
s.insert (20);
s.insert (30);
s.insert (40);
s.insert (50);
s.insert (60);
s.insert (60);
s.insert (60);
otomatik i = s.begin();
cout << "Birinci konumdaki eleman" << * i << endl;
cout << "Kümenin boyutu" << s.size() << endl;
s.find (20) != s.end()? cout << "Öğe bulundu" << endl: cout << "Öğe bulunamadı" << endl;
s.silme (30);
cout << "Tüm öğeleri yazdırma" << endl;
for (auto i = s.begin(); ben != s.end(); ben++) {
cout << * ben << " ";
}
Çıktı:
İlk konumdaki eleman 20
Setin boyutu 5
Öğe bulundu
Tüm öğeleri yazdırma
20 40 50 60
C++ Zor Olmaz
Diğer tüm becerilerde olduğu gibi, STL'den en iyi şekilde yararlanmak için pratik yapmak çok önemlidir. Bu kapsayıcılar ve algoritmalar zamandan tasarruf etmenize yardımcı olabilir ve kullanımı kolaydır. Yukarıda gösterilen örnekleri uygulayarak başlayın ve sonunda onu kendi projelerinizde de kullanmaya başlayacaksınız.
Ancak, C++'ı ilk kez öğreniyorsanız, STL'yi anlamaya geçmeden önce temel bilgileri öğrenerek başlayın.
C++ öğrenmek ister misiniz? Hem yeni başlayanlar hem de deneyimli programcılar için en iyi C++ web siteleri ve çevrimiçi kursları burada.
Sonrakini Oku
- Programlama
- Kodlama Eğitimleri
- Fonksiyonel Programlama
Nitin, JavaScript teknolojilerini kullanarak web uygulamaları geliştiren hevesli bir yazılım geliştiricisi ve bilgisayar mühendisliği öğrencisidir. Serbest web geliştiricisi olarak çalışıyor ve boş zamanlarında Linux ve Programlama için yazmayı seviyor.
Haber bültenimize abone ol
Teknik ipuçları, incelemeler, ücretsiz e-kitaplar ve özel fırsatlar için bültenimize katılın!
Bir adım daha…!
Lütfen size az önce gönderdiğimiz e-postadaki e-posta adresinizi onaylayın.