![]() |
![]() ![]() ![]() ![]() |
![]() |
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.
:: Главная :: ::
реклама |