19 Kasım 2017 Pazar

iterator

Giriş
Açıklaması şöyle
The iterator categories defined in C++98 are extremely limiting because they bind together two orthogonal concepts: traversal and element access. For example, because a random access iterator is required to return a reference (and not a proxy) when dereferenced, it is impossible to capture the capabilities of vector<bool>::iterator using the C++98 categories
Iterator Facade and Adaptor
iterator_facade
iterator_facade yazısına taşıdım.

iterator_adaptor
Şöyle yaparız.
#include <boost/iterator_adaptors.hpp>

template <typename BaseIterator>
struct Adapt : boost::iterator_adaptor<Adapt<BaseIterator>, BaseIterator> {
  using base = boost::iterator_adaptor<Adapt<BaseIterator>, BaseIterator>;
  using base::base;
  using base::operator=;
};

Specialized Adaptors
iterator Specialized Adaptors yazısına taşıdım.

Yardımcı Sınıflar
make_transform_iterator
transform_iterator yaratmayı kolaylaştırır. Şöyle yaparız.
typedef std::map<std::string, int>::value_type value_type;
std::map<std::string, int> a;
a["one"] = 1;
a["two"] = 2;

// returns the second element 
boost::function<int(value_type&)> f = boost::bind(&value_type::second, _1);
std::copy(boost::make_transform_iterator(a.begin(), f), 
          boost::make_transform_iterator(a.end(), f),
          std::ostream_iterator<int>(std::cout, " "));
Çıktı olarak 1 ve 2 alırız.

Hiç yorum yok:

Yorum Gönder