![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
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.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: ::
реклама |