basic_string sınıfının size_type türü ve const static npos veri öğesi

basic_string sınıf şablonunun en önemli içsel türlerinden (nested types) biri size_type türüdür.  size_type türünün bildirimi şu şekildedir:

Bildirimden de görüldüğü gibi aslında size_type üçüncü şablon tür parametresinin (Allocator Type) türünün yine size_type isimli içsel türüne eş isimdir ve işaretsiz bir tamsayı türüne karşılık gelir. string sınıfı için bu tür standart kütüphanenin size_t türüdür.
Yani eğer string sınıfını kullanıyorsak size_type türü yerine doğrudan size_t türünü kullanabiliriz.
basic_string sınınf şablonunun arayüzünde size_type türü bazı işlevlerin geri dönüş değeri türü ve bazı işlevlerin de parametre değişkeninin/değişkenlerinin türü olarak karşımıza çıkar. Birkaç üye işlevden örnek verelim:

size_type türü aşağıdaki verilerin türüdür:
i) Yazı uzunluğunun türü
ii) Yazının bir karakterinin indisinin türü
iii) Adet (tane) türü.

Herhangi bir işlev bizden yukarıdaki değerlerden birini istiyor ise ilgili parametre değişkeni size_type türündendir. Yine herhangi bir üye işlev bize bu değerlerden birini veriyor ise işlevin geri dönüş değeri bu tür olacaktır. Örneğin string sınıfının arama yapan tüm işlevlerinin geri dönüş değeri aranan öğeye ilişkin indis değeri olduğundan tüm arama işlevlerinin geri dönüş değerlerisize_type türündendir.

string sınıfının const static public veri öğesi olan npos ilgili türün en büyük tamsayı değeridir:

Peki neden npos isimli bir const static veri öğemiz var? npos değeri iki temel amaçla kullanılır.
i) size_type türünün en büyük değeri olduğundan hiçbir yazının hiçbir karakterinin indisi npos değeri olamaz. Çünkü npos bir yazının olabilecek en büyük uzunluk değeridir. (Yazının ilk karakterinin indisinin 0 olduğunu hatırlatalım). Bu durumda arama işlevleri aranan değerin yazı içinde bulunmaması durumunda özel bir değer olarak npos değerine geri dönerler.

ii) basic_string sınıfının bazı işlevlerinde şöyle bir parametre çifti vardır:

İşlev yaptığı işi yazının idx indisli öğesinden başlayarak n karakteri üstünde gerçekleştirir. Bu tür işlevlere n değeri olarak idx indisiyle başlayan yazının karakter sayısından daha yüksek bir değerin geçilmesi çalışma zamanı hatasına neden olmayan normal ve olağan bir durumdur. Bu durumda söz konusu işlem yazının geriye kalan karakterlerin tamamı üzerinde yapılır. Eğer böyle bir işlevin işini idx indisinden başlayarak geriye kalan tüm karakterler üzerinde yapmasını istersek işleve n değeri olarak geçebileceğimiz ve her zaman doğru olma garantisindeki tek değer npos değeridir.

string sınıfının erase işlevlerinden biri bu duruma örnek olarak verilebilir:

Bu işlev stringin idx indisli öğesinden başlayarak n tane karakteri stringden siler. n için varsayılan değer olarak npos değerinin seçildiğini görüyorsunuz. Yani işlevin ikinci parametre değişkenine bir değer geçmezsek npos değerini geçmiş oluyoruz. Bu durumda belirtiğimiz idx değerinden başlayarak geriye kalan tüm karakterler silinmiş oluyor.

Aşağıdaki kod npos veri öğesinin her iki kullanımını da gösteriyor. Kodda file_name stringinin tuttuğu yazıdaki eğer nokta karakteri var ise son nokta karakteri ve bunu izleyen tüm karakterler siliniyor:

Share

Necati Ergin

C ve Sistem Programcıları Derneğinde eğitmen olarak çalışıyor.

Bunlar da ilginizi çekebilir

Kod Eklemek İçin Okuyun
Eklemek istediğiniz kodları lütfen aşağıdaki “pre” kodları arasında yazınız.
<pre class="lang:c++ decode:true ">
--yazacağınız kodlar--
</pre>
(buradan kopyalayarak kullanabilirsiniz)