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.