iota algoritması

C++11 ile gelen bu algoritmayı çok seviyorum. Bir kere ismi çok güzel: yota.
Yota yunan alfabesinin dokuzuncu harfi. (Ιώτα). Çok karizmatik bir karakter. Yunanlılar da bu harfi Fenikeliler’den almışlar.
iota başta APL programlama dilinde olmak üzere bazı programlama dillerinde ardışık tamsayılar üretmek için kullanılmış. Örneğin APL dilinde ι9 ifadesi 1 2 3 4 5 6 7 8 9  tamsayı dizisini üretiyor.
Aslında özgün bir STL bileşeni olan iota algoritması C++98‘e resmi olarak katılmamış. C++11 ile birlikte bu güzel algortima da kütüphanede yerini aldı:

Şablonumuz en az forward iterator kategorisinde bir adımlayıcı  istiyor. Algoritmamız aldığı adımlayıcı aralığındaki öğeleri value değerinden başlayarak ardışık değerlerle dolduruyor.
Algoritmamızın şablon kodu aşağıdaki gibi gerçekleştirebilir:

Aşağıda bir int listesini 1‘den 100‘e kadar ardışık tamsayılarla dolduruyoruz:

Aşağıdaki gibi bir Date sınıfımız olsun. Sınıfımızın public arayüzünde yalnızca örneğimizde kullanacağımız işlevlerin bildirimlerini veriyoruz:

Sınıfın ++ operatör işlevi bir Date nesnesinin tuttuğu tarihi bir gün arttırıyor olsun. Görüldüğü gibi sınıfın bir akıma yazıcı (inserter) global işlevi de var.

Kodumuzla date_vec dinamik dizisini 2016 yılının tüm tarihleriyle ardışık olarak doldurmak istedik. Böceği bulabildiniz mi?

Necati Ergin

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

Bunlar da ilginizi çekebilir

iota algoritması” için 2 yorum

  1. Selamlar Necati Bey,

    Aşağıdaki gibi bir hata oluşuyor. call to non-constexpr function ‘void std::iota(_ForwardIterator, _ForwardIterator, _Tp) [with _ForwardIterator = long unsigned int*; _Tp = int]’

    std::iota’yi constexpr bir fonksiyonda kullanma şansımız yok mu?
    constexpr bir fonksiyon için alternatif nasıl bir yöntem izlememiz gerekir?

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Kod Eklemek İçin Okuyun