31 Ocak 2018 Çarşamba

std::iterator_traits

Giriş
STL algoritmalarında iterator tipleri çok kullanıılır. iterator_traits iterator'ler ile çalışmayı kolaylaştırır.
iterator_category Alanı
Örnek
Şöyle yaparız.
template <typename It>
std::string cat(It const&) {
  return typeid(typename std::iterator_traits<It>::iterator_category).name();
}
value_type Alanı
Bir iterator'ın value_type tipini
typename std::iterator_traits<Iterator>::value_type 
şeklinde alabilmemizi  sağlar.
Örnek
Şöyle yaparız.
std::iterator_traits<int*>::value_type
Örnek
Şöyle yaparız
#include <iterator>

template<typename Iterator>
typename std::iterator_traits<Iterator>::value_type 
sum(Iterator begin, Iterator end )
{
  using value_type = typename std::iterator_traits<Iterator>::value_type;
  value_type s = value_type();
  for (Iterator it = begin; it != end; it++) {
    s += *it;
  }
  return s;
}
Bir başka örnek'te benzer bir kullanım görülebilir.

Diğer
Aslında iterator_traits belirtilen iterator içindeki value_type'ı döndürmekten başka bir şey yapmaz. Yani şöyle de kodlayabilirdik.
template <typename Iter> auto func(Iter &first, Iter &last)
{
    using IterType = typename Iter::value_type;
    ...
}





Hiç yorum yok:

Yorum Gönder