C++'ta Nesne Yönelimli Programlama (OOP)

C++'ta Nesne Yönelimli Programlama (OOP)

C++ programlama dilinde Nesne Yönelimli Programlama OOP tanımı ve sınıfların, nesnelerin kullanımını açıklayan yazı OOP'nin modüler, yeniden kullanılabilir ve ölçeklenebilir olması gibi avantajları da belirtilmiştir Sınıf ve nesne oluşturma işlemi örnek kodlar ile gösterilmiştir Sınıf üyeleri ise fonksiyonlar ve değişkenler olarak iki farklı tipte ele alınmıştır

C++'ta Nesne Yönelimli Programlama (OOP)

C++ programlama dilinde nesne yönelimli programlama veya kısaca OOP, nesneleri ve onların ilişkilerini kullanan programlama yaklaşımıdır. Bu yaklaşım, büyük programlamanın daha kolay yönetilebilmesine imkan sağlar. OOP'nin en temel özelliği, sınıflar ve nesnelerdir. Sınıflar, bir nesne grubuna ait özellikleri ve davranışları tanımlayan şablonlardır. Nesneler ise, bu şablona uygun olarak oluşturulan örneklerdir.

C++ programlama dilinde OOP, hızlı ve etkili bir şekilde kodlama yapılmasına olanak tanır. Bu sayede kod tekrarları azalır ve sınıfların tekrar kullanımı sağlanır. OOP ile birlikte programlama daha kolay anlaşılır ve müdahale edilebilir hale gelir. C++ programlama dili, sınıfların oluşturulmasıyla birlikte nesnelerin kullanımına da imkan verir. Nesneler, sınıfların özelliklerini içerir ve sınıflar arasında etkileşim sağlar.


Nesne Yönelimli Programlamanın Avantajları

Nesne Yönelimli Programlama (OOP), C++ programlama dilinde kullanılan bir programlama yaklaşımıdır. Bu yaklaşım, programlamanın daha anlaşılır, esnek, yeniden kullanılabilir ve ölçeklenebilir hale gelmesine olanak tanır. Nesne yönelimli programlamanın birçok avantajı vardır:

  • Modülerlik: Nesne yönelimli programlama, kodun farklı parçalarını ayrı sınıflar halinde organize etme olanağı sağlar.
  • Kodun yeniden kullanılabilirliği: Kodun farklı bölümleri, benzer işlevlere sahip olan birçok proje için tekrar kullanılabilir.
  • Kodun esnekliği: Nesne yönelimli programlamanın daha esnek bir yapıya sahip olması, daha kolay değiştirmeyi ve ölçeklemeyi sağlar.
  • Veri gizliliği: Sınıflar, herhangi bir sınıfın verilerini gizlemesine izin verir.

Bu avantajlar, kodun yazılması, test edilmesi ve sürdürülmesi için daha fazla zaman ve paradan tasarruf sağlar. Nesne yönelimli programlama, daha az hata ve daha az maliyetle daha iyi bir kod yazılmasına olanak tanır. Bu nedenle, C++ programlama dili için nesne yönelimli programlama, birçok geliştirici için temel bir ihtiyaçtır.


C++ Sınıfları ve Nesneleri

C++ programlama dilinde nesne yönelimli programlama, sınıflar ve nesneler üzerine kuruludur. Sınıflar, nesneleri oluşturmak için kullanılan bir kalıptır. Sınıfta tanımlanan özellik ve fonksiyonlar, nesnelerin eylemlerini ve özelliklerini belirtir.

Örneğin, bir araba sınıfı belirleyebiliriz. Bu sınıfın özellikleri marka, model, renk vb. gibi şeyler olabilir. Aynı şekilde, bu sınıfın fonksiyonları aracın hızını, frenlerini, gaz pedalını vb. kontrol edebilir. Bu sınıftan türetilen nesneler, belirtilen özelliklere sahip olacak ve belirtildiği gibi davranacaktır.

Sınıf Nesneler
Araba BMW, Mercedes, Audi
Renk Kırmızı, Siyah, Beyaz
Hız 120 km/h, 180 km/h

Yukarıdaki örnekte, Araba sınıfından türetilen BMW, Mercedes ve Audi gibi nesneler belirtilen özelliklere sahiptir. Nesne yönelimli programlama, C++ dilinde çok yaygındır ve sınıf ve nesnelerin nasıl oluşturulacağı konusunda ayrıntılı bilgi sağlar. Bu nedenle, C++ öğrenirken bu konuda iyi bir anlayışa sahip olmak önemlidir.


Sınıf ve Nesne Oluşturma

C++ programlama dilinde sınıf ve nesne oluşturma işlemleri oldukça önemlidir. Sınıf oluşturmak için genellikle örnek olarak bir yapının kullanımı tercih edilir. Bu yapının içerisinde üyeler belirlenir ve buna uygun olarak bir nesne oluşturulur. Sınıf oluşturma işlemi için ise class anahtar kelimesi kullanılır.

Bir sınıf oluşturulurken, sınıfın ismi ve üyeleri belirlenir. Üyeler, sınıfın yapısına göre belirlenir. Bu üyeler, fonksiyonlar veya değişkenler olabilir. Nesne oluşturma işlemi ise sınıftan bir örnek alma işlemidir. Oluşturulan bu nesne, sınıf içerisinde belirlenen özelliklere sahip olacaktır.

Sınıf ve nesne oluşturma işlemleri için örnek kod şu şekildedir:

class Araba {
public:
 int hiz;
 int yolcu_sayisi;
 void hizlan() {
  hiz += 10;
 }
 void yavasla() {
  hiz -= 10;
 }
};
Araba Audi;
Audi.hiz = 0;
Audi.yolcu_sayisi = 4;
Audi.hizlan();

Bu kod örneğinde, Araba adında bir sınıf oluşturulmuştur. Bu sınıfın üyeleri olarak hiz ve yolcu_sayisi belirlenmiştir. Ayrıca hızlan() ve yavasla() fonksiyonları da sınıfın üyeleri arasındadır. Nesne oluşturma işlemi ise Araba Audi; komutu ile gerçekleştirilmiştir. Audi örneği, sınıfın özelliklerini taşıyacaktır ve hızlan() fonksiyonuyla birlikte hızı arttırılmıştır.


Sınıf Üyeleri

C++ programlama dilinde sınıfların içinde yer alabilen üyeler, iki farklı tipe ayrılmaktadır: fonksiyonlar ve değişkenler. Öncelikle sınıf içinde tanımlanan değişkenlerden bahsedebiliriz. Bu değişkenler, sınıfın veri üyeleridir ve sınıfın genelinde kullanılabilmektedir. Bunun yanı sıra, sınıf içinde yer alan fonksiyonlar da sınıfın özellikleri ve işlemleri hakkında bilgi sağlama amacı taşımaktadır.

Sınıf içinde yer alan fonksiyonlar, üye fonksiyonlar ve sınıf fonksiyonları olmak üzere ikiye ayrılmaktadır. Üye fonksiyonlar, sınıfın veri üyelerine erişebilen ve sınıf içerisindeki işlemleri yapabilen fonksiyonlardır. Sınıf fonksiyonları ise, sınıftaki objelerin özelliklerine erişemeyen ve genellikle sınıfın üyeleriyle çalışmayan fonksiyonlardır.

Bunun yanı sıra, C++ programlama dilinde public, private ve protected gibi erişim belirleyicileri de kullanılmaktadır. public belirleyicisiyle tanımlanan üyeler, sınıfın içerisinde ve dışındaki kodlar tarafından erişilebilir. private belirleyicisiyle tanımlanan üyeler ise, sadece sınıfın içinde yer alan kodlar tarafından erişilebilir. protected belirleyicisi ise, sınıfın içinde ve sınıfın kalıtım alan farklı sınıflarında kullanılabilmektedir.

Sınıf üyelerinin, farklı tiplerde değişkenler ve fonksiyonlar olarak tanımlanabilmesi, programcılara ciddi bir esneklik sağlamaktadır. Ayrıca, nesne yönelimli programlama sayesinde bu üyelerin farklı objeler tarafından farklı şekillerde kullanılabilmesi de mümkündür.


Nesne Oluşturma

C++ programlama dilinde nesne oluşturma işlemleri oldukça önemli bir konudur. Bu işlem sınıfların kullanımını gerektirmektedir. Sınıflar özellikler barındıran ve işlevler gerçekleştiren yapılardır. Bu işlevlerin gerçekleştirilmesi için öncelikle sınıfın bir örneği oluşturulması gerekmektedir. Bu örneğe de nesne adı verilir.

Örnek olarak, bir Araba sınıfı düşünelim. Bu sınıfın özellikleri arasında marka, model, renk gibi şeyler olabilir. Ayrıca arabanın hızlanması veya fren yapması gibi işlevleri de bulunabilir. Nesne oluşturma işlemi için ise öncelikle Araba sınıfından bir nesne oluşturulması gerekmektedir. Bu oluşturma işlemi constructor fonksiyonu aracılığıyla gerçekleştirilir.

Özetle, C++ programlama dilinde nesne oluşturma işlemi sınıfların kullanımını gerektiren önemli bir konudur. Nesne oluşturma işlemi sınıfın constructor fonksiyonu aracılığıyla yapılır. Bu işlem sırasında nesne adı verilir ve bu nesne üzerinden sınıfın özellikleri ve işlevleri kullanılabilir.


Nesne Yönelimli Programlama Özellikleri

Nesne yönelimli programlama, yazılım geliştirmede oldukça önemli bir paradigmadır. Bu yönelim, C++ programlama dilinde de yaygın olarak kullanılır. Nesne yönelimli programlama özellikleri arasında kalıtım, çok biçimlilik ve soyutlama gibi temel öğeler yer alır.

Kalıtım, bir sınıfın başka bir sınıftan miras alınmasıdır. Bu, kod tekrarını azaltır ve yeni sınıflar oluşturmak için bir temel görevi görür. Bu özellik, sınıflar arasında bir hiyerarşi sağlayarak, daha verimli bir kod yazımını sağlar. C++’ta kalıtım yapmak için, “class” anahtar sözcüğünü kullanarak yeni bir sınıf türetilir.

Kalıtımın Avantajları Kalıtımın Dezavantajları
- Kod tekrarını azaltır
- Daha verimli bir kod yazımını sağlar
- Hiyerarşinin karmaşıklığı, sorunlara neden olabilir

Çok biçimlilik, farklı sınıfların aynı ismi taşıyan fonksiyonlarını barındıran bir özellik olarak tanımlanabilir. Bu, aynı fonksiyonların farklı parametrelerle çağrılmasını sağlar. Yani, aynı isme sahip ancak farklı işlevleri olan fonksiyonları kullanmak mümkündür.

  • Çok biçimlilik türleri:
  • - Statik Çok Biçimlilik: Derleme zamanında gerçekleşir ve aşırı yükleme kullanılır
  • - Dinamik Çok Biçimlilik: Çalışma zamanında gerçekleşir ve sanal işlevler kullanılır

Soyutlama, genel bir tasarım öğesi tanımlayarak, uygulamada esneklik sağlayan bir özelliktir. Bu, verileri ve işlevleri bir arada gruplayarak, istemcinin sadece kullandığı işlevleri görmesine izin verir. C++’ta soyutlama yapmak için “abstract” anahtar kelimesi kullanılır.

Nesne yönelimli programlama özellikleri, C++ programlama dilinin güçlü yönlerinden biridir. Bu özellikleri doğru şekilde kullanarak, kodunuzu daha okunaklı ve sürdürülebilir hale getirebilirsiniz.


Polimorfizm /Çok Biçimlilik

Polimorfizm/Çok Biçimlilik, C++ programlama dilinde sıkça kullanılan nesne yönelimli programlama (OOP) özelliklerinden biridir. Bu özellik, farklı nesnelerin aynı fonksiyonu farklı şekilde uygulayabilmesine olanak tanır. Bu, programlama yaparken daha esnek bir yaklaşım sağlar ve kodun tekrarını azaltır.

C++ dilinde, polimorfizm iki şekilde gerçekleştirilir: statik bağlama ve dinamik bağlama. Statik bağlama, nesne fonksiyonlarının derleme sırasında belirlendiği ve çalışma anında değiştirilemediği bir yöntemdir. Dinamik bağlama ise fonksiyonların çalışma zamanında çağrıldığı ve değiştirilebildiği bir yöntemdir.

Bu özellik aynı zamanda, miras alınan sınıfların bazı üyelerinin yeniden tanımlanabilmesine de olanak tanır. Bu şekilde, alt sınıflar, üst sınıflarının bazı özelliklerini kullanarak kendilerine özgü bir yapı oluşturabilirler.

Özetle, polimorfizm/çok biçimlilik, C++ programlama dilinde oldukça önemli bir özelliktir ve nesne yönelimli programlamada sıkça kullanılır. Bu özellik, programcılara daha esnek bir yaklaşım ve kodun tekrarını azaltma imkanı sağlar.


Statik ve Dinamik Bağlama

C++ programlama dilinde statik ve dinamik bağlama, nesne yönelimli programlamanın önemli bir özelliğidir. Statik bağlama, derleme zamanında gerçekleştirilir ve obje çağrıları doğrudan objenin değerine bağlı olarak yapılır. Dinamik bağlama ise çalışma zamanında gerçekleştirilir ve obje çağrıları pointer işaretçileri kullanılarak yapılır. Bu bağlama yöntemleri, kodun daha öngörülebilir ve benzer durumlarda tekrar kullanılabilir olmasını sağlar.

Özellikle büyük programlarda, statik ve dinamik bağlama yardımcı olurlar. C++ programlama dili, nesne yönelimli programlama tekniklerinin yanı sıra gelişmiş bağlama özellikleri sayesinde, daha güçlü ve karmaşık programların oluşturulmasını mümkün kılar.


Sanal Fonksiyonlar

Sanal Fonksiyonlar, C++ programlama dilinde sınıf türünün çok biçimli hale gelmesine izin veren bir özelliktir. Bu özellik, hem kalıtım hem de üye işlevleri için geçerlidir. Bu fonksiyonlar, sınıfın alt türlerinde üye işlevlerinin yeniden tanımlanmasına izin verir. Bu, bir sınıftan türetilen farklı sınıfların, aynı işlevin farklı bir uygulamasını yapmasını sağlar.

Sanal Fonksiyonlar, sınıfın üye işlevleri olarak tanımlanırlar ve "virtual" olarak bildirilirler. Sınıfın türemesi, üye işlevlerin yeniden tanımlanmasına izin verdiğinde, bu fonksiyonlar kullanışlı hale gelir. Bunun yanı sıra, sınıfın alt türlerinde yeniden tanımlanan sanal fonksiyonlar, sınıfın üyesi olarak işlev görür ve alt türde çağrılabilir.

Sanal Fonksiyonların avantajları arasında, çok biçimlilik ve geç bağlama sayılabilir. Çok biçimlilik, sınıf arayüzlerindeki işlevlerin, farklı sınıflar tarafından farklı şekillerde uygulanmasını sağlar. Bu işlevsellik, sınıflardaki verilerin gizliliğini korur ve sınıf kullanıcısına gereksinim duydukları işlevselliği sağlar. Geç bağlama ise, nesnelerin çalışma zamanında dinamik olarak karar verilen işleve yönlendirilmesini sağlar. Bu, nesnelerin uygulamanın ihtiyacına göre davranmasını sağlar ve yazılımın esnekliğini artırır.


Operator Overloading

C++ programlama dilinde, birçok farklı operatör (aritmetik, karşılaştırma, atama vb.) aşırı yüklenebilir. Böylece, kullanıcının kendi veri tiplerini oluşturarak bu operatörleri kendi yöntemleriyle kullanabilir. Bu, C++'ın nesne yönelimli programlama felsefesine uygun bir yaklaşımdır ve kodun okunabilirliğini artırır.

Operator aşırı yükleme, genellikle sınıf nesneleriyle çalışırken kullanılır. Örneğin, iki karmaşık sayı nesnesini toplamak istediğinizde, programcı olarak toplama işleminin nasıl gerçekleştirileceğini açıkça belirtmek yerine, + operatörünü aşırı yükleyerek bir toplama işlevi oluşturabilirsiniz. Ayrıca, << ve >> operatörleri için aşırı yükleme, veri çıkışı ve girişi için kullanılabilir.

Ayrıca, operator aşırı yükleme özelliği, özellikle C++'ta kullanılan STL (Standard Template Library) tarafından sıkça kullanılır. Örneğin, vector sınıfı için [] operatörünün aşırı yüklenmesi, vektör öğelerine erişmek için kullanılabilir. Bu özellik, C++'ın güçlü bir dil olduğunu ve programcılara çok sayıda seçenek sunarak işlerini kolaylaştırdığını gösterir.


Şablonlar ve C++ Templateleri

C++ programlama dilinde şablonlar ve C++ templateleri oldukça önemli konular arasında yer alır. Şablonlar sayesinde kod tekrarları azaltılabilir ve daha verimli bir programlama yapısı oluşturulabilir. Templateler ise, veri tipine bağlı olmadan işlemler gerçekleştirilmesini sağlar.

Şablonlar, kullanıcı tanımlı veri tipleri için genel kod yapısı oluşturmak için kullanılır. Fonksiyon şablonları ile aynı işlemi yapan sınıf şablonları da mevcuttur. Her iki yapıda da kullanılabilen şablonlar, kod tekrarını önler ve programın daha sade bir yapıya sahip olmasını sağlar.

Şablon Kullanımı
Fonksiyon Şablonu Aynı işlemi farklı veri tipleri için yürütür.
Sınıf Şablonu Kullanıcı tanımlı veri tipleri için genel kod yapısı oluşturur.

C++ Templateleri ise, kullanılan veri tipine bağlı olmadan işlemler gerçekleştirmeyi sağlayan bir yapıdır. Örneğin, program içerisinde kullanılan bir array değişkenindeki elemanların toplamını hesaplamak istiyorsak, farklı veri tipleri için ayrı fonksiyonlar yazmak yerine, template kullanarak bir fonksiyon yazabiliriz.

C++ templateleri, hem verimli bir programlama stratejisi hem de daha az kod yazmayı gerektirmesi nedeniyle oldukça önemlidir. Ayrıca templateler, kodun daha esnek olmasına da olanak sağlar.

  • Kod tekrarlarını azaltır
  • Daha verimli bir programlama yapısı oluşturur
  • Veri tipine bağlı olmadan işlemler gerçekleştirilmesini sağlar.
  • Daha esnek bir kod yapısı oluşturur.

Fonksiyon Şablonları

Fonksiyon şablonları, C++ programlama dilinde kullanabileceğimiz bir şablon türüdür. Bu şablonlar, değişken türleri veya değerleri farklı olan aynı işlemi gerçekleştiren fonksiyonlar oluşturabilmemize olanak sağlar. Fonksiyon şablonu oluşturmak için, fonksiyon tanımı başında template anahtar kelimesi kullanırız.

Örnek olarak, fonksiyon şablonu kullanarak iki sayıyı toplayan bir fonksiyon yazabiliriz:

Fonksiyon Tanımı Kullanımı
template <typename T>T Topla(T x, T y){    return x + y;}
int a = 5, b = 3;float c = 2.5, d = 4.2;std::cout << Topla(a, b) << std::endl; //8std::cout << Topla(c, d) << std::endl; //6.7

Yukarıdaki örnekte, typename anahtar kelimesi, fonksiyon şablonu için kullanılacak türün belirtilmesini sağlar. Ayrıca, fonksiyonu çağırdığımızda, parametre olarak hem tamsayılar hem de ondalık sayılar kullandık ve fonksiyon, girilen veri türlerine göre otomatik olarak değişkenleri topladı.

Fonksiyon şablonları, kod tekrarını önlemeye yardımcı olur ve programcıların farklı veri türleri veya veri değerleri üzerinde çalışmak için ayrı ayrı fonksiyonlar yazmasını engeller. Bununla birlikte, bazı durumlarda, belirli bir veri türü veya veri değeri için özelleştirilmiş bir işleme ihtiyacımız olabilir. Bu gibi durumlarda, fonksiyon şablonunun yanı sıra özel bir fonksiyon tanımlayabiliriz.

Sonuç olarak, C++ programlama dilinde fonksiyon şablonları, veri türleri veya veri değerleri farklı olan aynı işlemi gerçekleştiren fonksiyonların oluşturulabilmesini sağlayan kullanışlı bir yapıdır. Fonksiyon şablonlarını kullanarak kod tekrarını önleyebilir ve daha optimize bir program yazabilirsiniz.


Sınıf Şablonları

C++ programlama dilinde Sınıf şablonları, farklı türlerdeki verilerle kullanılabilmesi için önemli bir özelliktir. Şablonlar, birden fazla veri türü için kullanılabilir hale getirilen bir yordamdır. Sınıf şablonları, farklı türler için sınıflar oluşturarak kod tekrarını minimuma indirme imkanı sunar.

Sınıf şablonları, genellikle ve en yaygın olarak veri saklama sınıflarında kullanılır. Bir sınıf şablonu oluşturulurken, şablonun ismi ve içeriği belirlenirken, veri türleri belirtilmez. Veri türleri, sınıf şablonu kullanıldığında tanımlanır.

Örneğin, bir vektör sınıfı şablonu oluşturmak için aşağıdaki kod bloğu kullanılabilir:

Kod Açıklama
template <typename T>class Vector {  T* arr;  int size;public:  Vector() {    arr = new T[10];    size = 10;  }  // diğer fonksiyonlar};
Bu kod bloğu, T'nin herhangi bir veri türü veya nesne türü olabileceği bir Vektör şablonu oluşturur.

Bir sınıf şablonu oluşturulduktan sonra, belirli bir veri türünü tanımlayarak bu şablonu kullanabiliriz. Örneğin:

Kod Açıklama
Vector<int> v; Vector<std::string> names;
Bu kodlar, Vektör sınıf şablonunu kullanarak, sırasıyla bir integer dizisi ve bir string dizisi tanımlar.

Sınıf şablonları, kod tekrarını azaltmak ve daha iyi bir kod organize etmek için kullanışlı bir araçtır. Şablonlar, kodun yeniden kullanılabilirliğini de arttırır. Ancak, aşırı kullanımda hata ayıklama zorlaşabilir, bu nedenle sınıf şablonlarının dikkatli bir şekilde kullanılması önemlidir.


C++ Veri Saklama Sınıfları ve STL

C++ programlama dili, veri işleme ve yönetme için kullanılan birçok sınıf ve STL (Standard Template Library) sunuyor. Bu sınıflar sayesinde, bir programcı, verileri daha kolay bir şekilde saklayabilir ve gerektiği zamanlarda bu verilere kolayca erişebilir. Bunun yanı sıra, STL, veri işleme ve yönetme işlemleri için birden çok hazır fonksiyon sunar.

C++ Veri saklama sınıfları arasında, Vektör, Deque ve Listeler yer alır. Vektör, dinamik olarak boyutlandırılabilen bir işleme sınıfıdır. Deque, yığınlara ihtiyaç duyan durumlarda kullanılan bir sınıftır ve Listeler, nesneleri sırayla saklamak için kullanılır.

C++ STL, ayrıca, algoritmaların hızlı bir şekilde oluşturulmasını sağlayan şablon sınıfları sunar. STL'deki en yaygın olan şablon sınıfları arasında, vector ve list yer alır. Bu sınıflar, daha kolay ve hızlı veri yönetimi sağlamak için tasarlanmıştır. Bunun yanı sıra, artık bu veri saklama sınıflarının yanı sıra, hash_map, priority_queue, stack ve queue gibi veri saklama yapılarının kullanımı da mümkündür.

C++ programlama dilinde veri yönetimi, veritabanlarından grafik işlemeye, sunucu işlemlerine kadar birçok alanda kullanılır ve bu nedenle C++ sınıf ve STL'lerinin farklı özelliklerini bilmek önemlidir. Bu sayede, en uygun veri saklama sınıfını ve fonksiyonu kullanarak, hatasız ve hızlı bir uygulama yazabilirsiniz.


C++ Vektör

C++ programlama dilinde vektörler, genellikle aynı türdeki verileri depolamak için kullanılan dinamik bir dizi olarak tanımlanabilir. Bu yapının kullanımı dizilere göre daha avantajlıdır. Vektör, boyutu dinamik olarak değiştirebilir ve hafızayı daha verimli bir şekilde kullanabilir. Vektörler, STL'ye yani Standard Template Library'e aittir.

İşte basit bir C++ vektör örneği:

Kod Açıklama
#include <vector>#include <iostream>using namespace std;int main() {  vector<int> v; // vektör oluşturma  v.push_back(1); // vektöre eleman ekleme  v.push_back(2);  v.push_back(3);  cout << "Vektör boyutu: " << v.size() << endl;  cout << "Vektör elemanları: ";  for (int i = 0; i < v.size(); i++) {    cout << v[i] << " ";  }  cout << endl;  return 0;}
Bir tamsayı vektörü oluşturur, elemanlar ekler ve ekrana boyutu ve elemanları yazdırır.

Yukarıdaki kod, bir vektör oluşturmak için <vector> başlık dosyasını kullanır. push_back() fonksiyonu, yeni bir eleman eklemek için kullanılır ve size() fonksiyonu, vektörün boyutunu döndürür.

Vektörler, genellikle STL'nin diğer veri saklama sınıflarıyla birlikte kullanılır. Vektörler, stack ve queue oluşturmak için de kullanılabilir.

C++ vektörleri hakkında daha fazla bilgi edinmek için, vektör işlevleri, kapasitesi, sıralama ve diğer ilginç konular hakkında kaynaklara başvurabilirsiniz.


C++ Deque

C++ Deque, iki uçtan erişim imkanı olan bir veri yapısıdır. "Double Ended Queue" teriminin kısaltmasıdır. C++ STL'nin bir parçasıdır ve vector ile list arasında bir yapıdır. Deque yapısı, list ile karşılaştırıldığında daha hızlı erişim ve ekleme işlemlerine izin vermektedir. Ayrıca vektör ile karşılaştırıldığında daha hızlı bir başlangıçta ve eleman ekleme işlemlerinde daha az zaman harcar.

Deque yapısı içerisindeki elemanlar, vektör gibi ardışık olarak depolanır ve doğrudan indekslenerek erişilebilirler. Ayrıca, elemanlar listeler gibi birbirine bağlanabilir. Deque yapısı, F7 ve Shift + F7 kısayolları ile erişim işlemlerine olanak sağlayarak, vector ve list’lerden çok daha fonksiyonel bir veri yapısıdır.

Deque İşlemleri Tanımı
push_back() Deque yapısının sonuna bir eleman ekler.
push_front() Deque yapısının başına bir eleman ekler.
pop_back() Deque yapısının son elemanını siler.
pop_front() Deque yapısının başındaki elemanı siler.
empty() Deque yapısının boş olup olmadığını kontrol eder.
size() Deque yapısının eleman sayısını döndürür.
clear() Deque yapısındaki tüm elemanları siler.

C++ Deque yapısı, özellikle bir sıra yapısına ihtiyaç duyulduğunda etkili bir şekilde kullanılır. İki yönlü erişim imkanı ile daha rahat bir kodlama süreci sağlar. Ancak, vektör ve list yapısı ile karşılaştırıldığında daha yavaş bir yapıdadır. Kullanılacak işleme göre doğru yapı seçimi yapılmalıdır.


C++ Listeler

C++ programlama dilinde bulunan liste yapısı, pek çok veri elemanını tutmak için kullanılabilir. Bu veri yapısında, veriler eklenirken veya çıkarılırken, herhangi bir karmaşıklığı önlemek için her zaman aynı yapı kullanılır. Listeler, dizilerden farklıdır çünkü boyutları dinamiktir ve elemanlar istenildiği gibi eklenebilir veya silinebilir.

Listeler, düğümler (node) olarak adlandırılan yapılardan oluşur. Her düğüm, içinde bir veri elemanı ve diğer düğümlere bağlantıları (adresleri) tutan bir işaretçi (pointer) bulundurur. Listenin başı ve sonu da birer işaretçi ile gösterilir. Böylece, eklemeler veya çıkarmalar yapılırken listeye erişim ve dolaşım oldukça hızlı ve kolaydır.

C++ dilinde liste yapısı kullanılırken, öncelikle bir liste tanımlaması yapmak gerekir. Bunun için, "list" sınıfı kullanılır. Aşağıdaki örnek, bir liste tanımlama ve bu liste içerisine eleman ekleme işlemini gösterir:

#include <list>using namespace std;int main(){   list<int> myList;   // int tipinde bir liste tanımlama   myList.push_back(1);   // liste sonuna eleman 1 ekleme   myList.push_back(2);   // liste sonuna eleman 2 ekleme   myList.push_back(3);   // liste sonuna eleman 3 ekleme    return 0;}

Bu örnekte, "list" sınıfının "push_back" fonksiyonu kullanılarak liste sonuna elemanlar eklenir. Ayrıca, başka bir liste veya dizi de eklenebilir veya listenin başından veya içinden eleman silinebilir.

Listeler, C++ programlama dilinde kullanımı kolay ve verimli bir veri yapısıdır. Diğer veri yapılarına göre daha az karmaşıklık içerirler ve veri elemanlarına erişim ve işlemler daha hızlı gerçekleştirilebilir.


C++ İteratör Kullanımı

C++ programlama dilinde iteratörler, veri yapıları üzerinde farklı işlemler yapmak için kullanılan bir araçtır. Ancak doğru kullanılmadığında, hatalara yol açabilir. Bu nedenle, C++ iteratörlerinin kullanımı hakkında bilgi sahibi olmak, programlama sürecinde oldukça faydalı olacaktır.

İteratörler, tanımlandığı veri yapısı türüne göre farklı işlemler yapabilirler. Örneğin, bir vektör iteratörü, vektör elemanları arasında dolaşarak veri yapısındaki her öğeyi işleyebilir.

İteratör Türleri Açıklamaları
vector::iterator Bir vektördeki öğelere erişmek için kullanılır
list::iterator Bir listedeki öğelere erişmek için kullanılır
map::iterator Bir haritadaki öğelere erişmek için kullanılır

İteratörler, veri yapısındaki her elemana bir kez erişirler ve veri yapısının boyutundan bağımsızdırlar. Bu nedenle, veri yapısında herhangi bir değişiklik yapıldığında, ilgili iteratörler kullanarak veri yapısını güncellemek mümkündür.

Örnek olarak, aşağıdaki kod parçası, vector::iterator kullanarak bir vektördeki öğeleri ekrana yazdırır:

      #include <iostream>    #include <vector>    int main() {      std::vector<int> v = {1, 2, 3, 4, 5};      for (auto it = v.begin(); it != v.end(); ++it) {        std::cout << *it << " ";      }      return 0;    }  

Yukarıdaki örnekte, vector::begin() ve vector::end() ile başlangıç ve bitiş değerleri belirlenir ve her öğe için döngü kullanılarak, öğeler ekrana yazdırılır.

İteratörlerin kullanımı hakkında daha fazla bilgi edinmek isteyenler, C++ dökümanlarına başvurabilirler. C++ iteratörleri güçlü ve kullanışlı bir araçtır ancak doğru kullanımı oldukça önemlidir. Bu nedenle, öğrenme sürecini atlamamak ve temel kavramları öğrenmek için zaman ayırmak gereklidir.