|  | 
|      | 
|  | 
| Transform IteratorBoost , ,
  
   | ||||||||||||||||||||||||||||||||||||||||||||||||
| Author: | Дэвид Абрахамс, Джереми Сик, Томас Витт | |||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Contact: | ЕслиСсылказатемссылкачленпреобразование_iterator=result_of ЕслиЗначениеявляетсяuse_default, тоvalue_typeчленremove_cv ЕслиИтераторМодели Считываемый итератор Lvalue и еслиИтератормодели Random Access Traversal Iterator, затемiterator_categoryконвертируется вrandom_access_iterator_tag.Итератормодели Bidirectional Traversal Iterator, затемiterator_categoryконвертируется вbidirectional_iterator_tag. В противном случаеiterator_categoryконвертируется вforward_iterator_tag.Итераторне моделируется Считываемый Lvalue Iteratoriterator_categoryконвертируется вinput_iterator_tag. transform_iterator requirementsТипUnaryFunctionдолжен быть приемлемым, копируемым конструируемым, а выражениеf(*i)должно быть действительным, еслиfявляется конст-объектом типаявляется объектом типаИтератора, и если типf(*i)должен бытьрезультатом_of АргументИтератордолжен моделировать читаемый итератор. transform_iterator modelsПолучившийсятрансформатор_iteratorмодели наиболее усовершенствованный из следующих, который также моделируетсяИтератор. 
 Transform_iteratorмоделирует наиболее совершенную стандартную концепцию обхода, которая смоделирована.Итератораргумент. ЕслиTransform_iteratorявляется моделью Readable Lvalue Iterator, то он моделирует следующие оригинальные концепции итератора в зависимости от того, чтоИтератормодели аргументов. 
 Еслитрансформировать_iteratorмодели Записываемый итератор Lvalue является изменяемым итератором (как определено в старых требованиях к итератору). Transform_iterator transform_iterator operationsВ дополнение к операциям, требуемым концепциями, смоделированнымиTransform_iterator,Transform_iteratorобеспечивает следующие операции. Transform_iterator(); 
 transform_iterator(Iteratorconst&x,UnaryFunctionf); 
 
template<class F2, class I2, class R2, class V2>
transform_iterator(
      transform_iterator<F2, I2, R2, V2> const& t
    , typename enable_if_convertible<I2, Iterator>::type* = 0      // exposition only
    , typename enable_if_convertible<F2, UnaryFunction>::type* = 0 // exposition only
);
 UnaryFunctionfunctor()const; 
 Итераторconst&base()const; 
 эталоноператор*()const; 
 transform_iterator&operator++(); 
 transform_iterator&operator--(); 
 template <class UnaryFunction, class Iterator> transform_iterator<UnaryFunction, Iterator> make_transform_iterator(Iterator it, UnaryFunction fun); 
 template <class UnaryFunction, class Iterator> transform_iterator<UnaryFunction, Iterator> make_transform_iterator(Iterator it); 
 ExampleЭто простой пример использования класса Transform_iterators для генерации итераторов, которые умножают (или добавляют) значение, возвращаемое путем отмены ссылки на итератор. В этом примере лучше использовать библиотеку лямбда. 
int x[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
const int N = sizeof(x)/sizeof(int);
typedef boost::binder1st< std::multiplies<int> > Function;
typedef boost::transform_iterator<Function, int*> doubling_iterator;
doubling_iterator i(x, boost::bind1st(std::multiplies<int>(), 2)),
  i_end(x + N, boost::bind1st(std::multiplies<int>(), 2));
std::cout << "multiplying the array by 2:" << std::endl;
while (i != i_end)
  std::cout << *i++ << " ";
std::cout << std::endl;
std::cout << "adding 4 to each element in the array:" << std::endl;
std::copy(boost::make_transform_iterator(x, boost::bind1st(std::plus<int>(), 4)),
          boost::make_transform_iterator(x + N, boost::bind1st(std::plus<int>(), 4)),
          std::ostream_iterator<int>(std::cout, " "));
std::cout << std::endl;
Результатом является: multiplying the array by 2: 2 4 6 8 10 12 14 16 adding 4 to each element in the array: 5 6 7 8 9 10 11 12 Статья Transform Iterator раздела может быть полезна для разработчиков на c++ и boost. :: Главная :: :: 
 | |||||||||||||||||||||||||||||||||||||||
|  ©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 | ||||||||||||||||||||||||||||||||||||||||