Algorithm | std::iota


std::iota C++11 ile gelen bir özelliktir. <numeric> başlık dosyasının içinde tanımlı olarak gelmektedir. Kısaca ardışıl ifadeler üretmek ve bunları container benzeri veri yapılarına atama yapmak için kullanılır. 

Temel bir std::iota implementasyonu
Yukarıda şablon türünde implementasyonu yapılan örnekte görüleceği üzere en az forward türünde bir Iterator 'ü parametre olarak almaktadır. Algoritmamız aldığı Iterator aralığındaki öğeleri value değerinden başlayarak ardışık değerlerle doldurmaktadır.

std:iota örneği - 1
Yukarıdaki örnekte iota'ya int dizisinin başlangıç ve bitiş adresleri verilmiş ve value olarak 10 değeri girilmiştir. Buradan şu çıkarımı yapabiliriz ki
  • numbers[0] = 10, 
  • numbers[1] = 11, 
  • numbers[2] = 12, 
  • numbers[3] = 13, 
  • numbers[4] = 14 olarak atama yapılacaktır. Ardından ekrana yazdırılarak işlemin doğru bir şekilde gerçekleştiği görülebilir.

std:iota örneği - 2 

Yukarıdaki örnekte iota'ya list'in başlangıç ve bitiş adresleri verilmiş ve value olarak 1 değeri girilmiştir. Buradan da benzer çıkarımı yapabiliriz ki ilist[0] = 1, ilist[1] = 2, ilist[2] = 3, ilist[3] = 4, ... , ilist[99] = 100 olarak atama yapılacaktır. Ardından burada da ekrana yazılarak işlemin doğru bir şekilde gerçekleştiği görülebilir.

std:iota örneği - 3   
Yukarıdaki örnekte ise diğerlerinden farklı olan nokta ise std::copy ile ekrana yazdırma işlemini gerçekleştirilmiş olmasıdır.

std:iota örneği - 4

std::iota'nın kullanım senaryolarının kısıtlı olmasından dolayı (Örneğin: 3 er 3 şer ardışıllık sağlamak gibi) yukarıda kendi yazacağımız sınıfın operator++ fonksiyonu sayesinde iota'nın bizim istediğimiz gibi çalışmasını sağlamış oluruz.

std:iota örneği - 4 (devam)

Burada kritik işleme sahip nokta yazdığımız sınıfın operator++'nın dışarıdan alınan lambda'yla ayarlanmasıdır. Yukarıda main kısmında görülebileceği üzere vector'ün içine şablon sınıfımızı kullanarak 3'li artan elemanlar eklenmiş olacaktır.