|  | 
|      | 
|  | 
| Shared Container Iterator DocumentationBoost , ,
  
   | ||||||||
| Параметр | Описание | 
|---|---|
| Контейнер | Тип контейнера, который мы хотим переделать. Это должна быть модель.КонтейнерКонцепция. | 
shared_container_iterator(Container::iterator const& it,
                          boost::shared_ptr<Container> const& container)
>
template <typename Container>
shared_container_iterator<Container>
make_shared_container_iterator(Container::iterator base,
                               boost::shared_ptr<Container> const& container)
>Эта функция обеспечивает альтернативу непосредственному построению общего контейнерного итератора. Используя генератор объектов, общий итератор контейнеров может быть создан и передан функции без явного указания ее типа.shared_iterator_example2.cpp:<
#include "shared_container_iterator.hpp"
#include "boost/shared_ptr.hpp"
#include <algorithm>
#include <iterator>
#include <iostream>
#include <vector>
template<typenameIterator>
voidprint_range_nl (Iterator begin, Iterator end) {
 typedeftypenamestd::iterator_traits<Iterator>::value_type val;
  std::copy(begin,end,std::ostream_iterator<val>(std::cout,","));
  std::cout.put('\n');
}
intmain() {
 typedefboost::shared_ptr< std::vector<int> > ints_t;
  {
    ints_t ints(newstd::vector<int>());
    ints->push_back(0);
    ints->push_back(1);
    ints->push_back(2);
    ints->push_back(3);
    ints->push_back(4);
    ints->push_back(5);
    print_range_nl(boost::make_shared_container_iterator(ints->begin(),ints),
		   boost::make_shared_container_iterator(ints->end(),ints));
  }
  
 return0;
}
>Обратите внимание, что типshared_container_iteratorникогда не называется явно. Выход из этого примера такой же, как и предыдущий.template <typename Container> std::pair< shared_container_iterator<Container>, shared_container_iterator<Container> > make_shared_container_range(boost::shared_ptr<Container> const& container);>Классshared_container_iteratorпредназначен в первую очередь для возврата, используя итераторы, диапазон значений, которые мы можем гарантировать, будут живы, пока итераторы. Это функция удобства, чтобы сделать именно это.<
std::make_pair(make_shared_container_iterator(container->begin(),container),
               make_shared_container_iterator(container->end(),container));
>shared_iterator_example3.cpp:<
#include "shared_container_iterator.hpp"
#include "boost/shared_ptr.hpp"
#include "boost/tuple/tuple.hpp" // for boost::tie
#include <algorithm>              // for std::copy
#include <iostream>             
#include <vector>
typedefboost::shared_container_iterator< std::vector<int> > iterator; 
std::pair<iterator,iterator>
return_range() {
  boost::shared_ptr< std::vector<int> > range(newstd::vector<int>());
  range->push_back(0);
  range->push_back(1);
  range->push_back(2);
  range->push_back(3);
  range->push_back(4);
  range->push_back(5);
 returnboost::make_shared_container_range(range);
}
intmain() {
  iterator i,end;
  
  boost::tie(i,end) = return_range();
  std::copy(i,end,std::ostream_iterator<int>(std::cout,","));
  std::cout.put('\n');
 return0;
}
>Хотя объектдиапазонаживет только в течение времени вызовадиапазона возврата, ссылка подсчитанаstd:: векторбудет жить доiиконца. Результат из этого примера такой же, как и предыдущие два.© Copyright 2003 Попечители Университета Индианы. На использование, модификацию и распространение распространяется лицензия Boost Software License, Version 1.0. (См. сопроводительный файл LICENSE_1_0.txt или копию по адресу http://www.boost.org/LICENSE_1_0.txt) Last modified: Mon Aug 11 11:27:03 EST 2003
© Copyright 2003 The Trustees of Indiana University. Use, modification and distribution is subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)[ORIG_END] -->
Статья Shared Container Iterator Documentation раздела может быть полезна для разработчиков на c++ и boost.
:: Главная :: ::
| реклама |