Giriş
Bu metodu kullanmak için şu satır dahil edilir.
C++11 ile gelen bu metod verilen aralığı belirtilen sayıdan başlamak üzere doldurur.
Örnek - Container capacity kadar sayı yerleştirilir
Şöyle yaparız. Listeye 0-100 arası sayılar yerleştirilir.
Şöyle yaparız. 0+1+2+ 3+4 toplamını yani 10 verir.
Bu metodu kullanmak için şu satır dahil edilir.
#include <numeric>
iota Yunan alfabesindeki bir harften gelir. Matematikte bir sayı kümesini belirtmek için kullanılır.C++11 ile gelen bu metod verilen aralığı belirtilen sayıdan başlamak üzere doldurur.
Örnek - Container capacity kadar sayı yerleştirilir
Şöyle yaparız. Listeye 0-100 arası sayılar yerleştirilir.
vector<int> v(101);
std::iota(v.begin(), v.end(), 0);
Örnek - Container capacity kadar sayı yerleştirilirŞöyle yaparız. 0+1+2+ 3+4 toplamını yani 10 verir.
constexpr int triangle_number(int n)
{
std::vector<int> intermediate(n);
std::iota(intermediate.begin(), intermediate.end(), 0);
return std::accumulate(intermediate.begin(), intermediate.end(), 0);
}
std::array<int, triangle_number(5)> arr;
iota ve bir basamak artırım
ioata ++ operatörü ile verilen değeri sadece 1 basamak artırır. Eğer n basamak artırmak istersek daha basit bir şekilde şöyle yaparız.
int n = -2;
std::generate(x.begin(), x.end(), [&n]{ return n+=2; });
int n = 10;
std::generate(x.begin(), x.end(), [&n]{ return n--;})
kendi iota functor'ımız
Şöyle yaparız. operator++ ve operator type metodlarını sağlarız.
template<class T>
struct IotaWrapper
{
typedef T type;
typedef std::function<type(const type&)> IncrFunction;
type value;
IncrFunction incrFunction;
IotaWrapper() = delete;
IotaWrapper(const type& n, const IncrFunction& incrFunction) :
value(n), incrFunction(incrFunction) {};
operator type() { return value; }
IotaWrapper& operator++() {value = incrFunction(value); return *this; }
};
int main()
{
IotaWrapper<int> n(0, [](const int& n){ return n+2; });
std::vector<int> v(10);
std::iota(v.begin(), v.end(), n);
for (auto i : v)
std::cout << i << ' ';
std::cout << std::endl;
}
Hiç yorum yok:
Yorum Gönder