Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Shared Container Iterator Documentation

Boost , ,

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

boost.png (6897 bytes)

Shared Container Iterator

Defined in header boost/shared_container_iterator.hpp

Цель совместно используемого итератора контейнеров заключается в прикреплении срока службы контейнера к сроку службы его итераторов. Другими словами, контейнер не будет удален до тех пор, пока не будут уничтожены все его итераторы. Общий контейнерный итератор обычно используется для реализации функций, которые возвращают итераторы по целому ряду объектов, которые должны существовать только в течение срока службы итераторов. Вернув пару общих итераторов из функции, абонент может вернуть выделенный набор объектов, срок службы которых автоматически управляется.

Общий итератор контейнера увеличивает итератор над общим контейнером. Он поддерживает справочный счет в общем контейнере. Если только общие итераторы контейнеров содержат ссылки на контейнер, срок службы контейнера закончится, когда последний общий итератор контейнера над ним будет уничтожен. В любом случае, общий контейнер гарантированно сохраняется после срока службы всех итераторов. Во всех других отношениях общий итератор контейнера ведет себя так же, как и его базовый итератор.

Синопсис

<
namespace boost {
  template <typenameContainer>
  class shared_container_iterator;
  template <typenameContainer>
  shared_container_iterator<Container>
  make_shared_container_iterator(typename Container::iterator base, 
    boost::shared_ptr<Container> const& container);
  std::pair<
    typename shared_container_iterator<Container>,
    typename shared_container_iterator<Container>
  >
  make_shared_container_range(boost::shared_ptr<Container> const& container);
}
>

Тип итератора контейнеров

<
template <typename Container> class shared_container_iterator;
>Шаблон классаshared_container_iteratorявляется общим типом контейнерного итератора. Аргумент типа шаблонаконтейнерадолжен моделировать концепцию контейнераконтейнера.

Пример

Следующий пример иллюстрирует, как создать итератор, который регулирует срок службы отсчетаstd::vector. Хотя первоначальный общий указательintsперестает существовать послеset_range().возвращается, объектыshared_counter_iteratorподдерживают ссылки на основной вектор и тем самым продлевают срок службы контейнера.

shared_iterator_example1.cpp:<

#include "shared_container_iterator.hpp"
#include "boost/shared_ptr.hpp"
#include <algorithm>
#include <iostream>
#include <vector>
typedefboost::shared_container_iterator< std::vector<int> > iterator;
voidset_range(iterator& i, iterator& end)  {
  boost::shared_ptr< std::vector<int> > 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);
  
  i = iterator(ints->begin(),ints);
  end = iterator(ints->end(),ints);
}
intmain() {
  iterator i,end;
  set_range(i,end);
  std::copy(i,end,std::ostream_iterator<int>(std::cout,","));
  std::cout.put('\n');
 return0;
}
>Вывод из этой части:<
0,1,2,3,4,5,
>

Параметры шаблонов

ПараметрОписание
КонтейнерТип контейнера, который мы хотим переделать. Это должна быть модель.КонтейнерКонцепция.

Модель

Shared_container_iteratorТип модели итератора тот же концепт, что и базовый итераторКонтейнер::iterator.

Члены

Тип совместно используемого контейнерного итератора реализует функции и операторы, необходимые для концепцииИтератор случайного доступа, хотя действительны только операции, определенные для базового итератора. Кроме того, он имеет следующий конструктор:<
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)
>Эта функция обеспечивает альтернативу непосредственному построению общего контейнерного итератора. Используя генератор объектов, общий итератор контейнеров может быть создан и передан функции без явного указания ее типа.

Пример

Этот пример, аналогичный предыдущему, используетmake_shared_container_iterator()Для создания итераторов.

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_container_iterator.

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иконца. Результат из этого примера такой же, как и предыдущие два.
Последнее изменение: 11 августа 11:27:03 EST 2003

© 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.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-07-05 04:20:36/0.0042741298675537/0