Boost Pointer Container Library Boost , ,
Pointer Container Library
Это не настоящий класс, который можно найти в библиотеке. Его целью является представление общего интерфейса всех указательных контейнеров.
Иерархия:
Навигат:
синопсис:
namespace boost
{
template
<
class T,
class CloneAllocator,
class VoidPtrContainer
>
class reversible_ptr_container
{
public: // typedefs
typedef T* value_type;
typedef T& reference;
typedef const T& const_reference;
typedef implementation defined iterator;
typedef implementation defined const_iterator;
typedef typename VoidPtrContainer::differnce_type difference_type;
typedef typename VoidPtrContainer::size_type size_type;
typedef typename VoidPtrContainer::allocator_type allocator_type;
typedef implementation defined reverse_iterator;
typedef implementation defined const_reverse_iterator;
typedef implementation defined auto_type;
public: // construct/copy/destroy
reversible_ptr_container();
explicit reversible_ptr_container( const reversible_ptr_container& r );
template< class Derived >
explicit reversible_ptr_container( const reversible_ptr_container<Derived>& r );
explicit reversible_ptr_container( std::auto_ptr<reversible_ptr_container> r );
template< class InputIterator >
reversible_ptr_container( InputIterator first, InputIterator last );
~reversible_ptr_container();
reversible_ptr_container& operator=( const reversible_ptr_container& r );
template<class Derived>
reversible_ptr_container& operator=( const reversible_ptr_container<Derived>& r );
reversible_ptr_container& operator=( std::auto_ptr<reversible_ptr_container> r );
allocator_type get_allocator() const;
public: // iterators
iterator begin();
const_iterator begin() const;
iterator end();
const_iterator end() const;
reverse_iterator rbegin();
const_reverse_iterator rbegin() const;
reverse_iterator rend();
const_reverse_iterator rend() const;
public: // capacity
size_type size() const;
size_type max_size() const;
bool empty() const;
public: // modifiers
void swap( reversible_ptr_container& r );
void clear():
VoidPtrContainer& base();
const VoidPtrContainer& base() const;
public: // pointer container requirements
auto_type replace( iterator position, T* x );
template< class U >
auto_type replace( iterator position, std::auto_ptr<U> x );
std::auto_ptr<reversible_ptr_container> clone() const;
std::auto_ptr<reversible_ptr_container> release();
auto_type release( iterator position );
}; // class 'reversible_ptr_container'
// comparison
template < class T, class CA, class VPC >
bool operator==( const reversible_ptr_container<T,CA,VPC>& x,
const reversible_ptr_container<T,CA,VPC>& y);
template < class T, class CA, class VPC >
bool operator<( const reversible_ptr_container<T,CA,VPC>& x,
const reversible_ptr_container<T,CA,VPC>& y);
template < class T, class CA, class VPC >
bool operator!=( const reversible_ptr_container<T,CA,VPC>& x,
const reversible_ptr_container<T,CA,VPC>& y);
template < class T, class CA, class VPC >
bool operator>( const reversible_ptr_container<T,CA,VPC>& x,
const reversible_ptr_container<T,CA,VPC>& y);
template < class T, class CA, class VPC >
bool operator>=( const reversible_ptr_container<T,CA,VPC>& x,
const reversible_ptr_container<T,CA,VPC>& y);
template < class T, class CA, class VPC >
bool operator<=( const reversible_ptr_container<T,CA,VPC>& x,
const reversible_ptr_container<T,CA,VPC>& y);
template< class T, class CA, class VPC >
void swap( reversible_ptr_container<T,CA,VPC>& x,
reversible_ptr_container<T,CA,VPC>& y );
// cloneability
template< class T, class CA, class VPC >
reversible_ptr_container<T,CA,VPC>*
new_clone( const reversible_ptr_container<T,CA,VPC>& r );
// null predicate
template< class Iterator >
bool is_null( Iterator i );
// serialization
template<class Archive, class T, class CA, class VPC>
void serialize( Archive& ar, reversible_ptr_container<T,CÁ,VPC>& c, const unsigned int version );
} // namespace 'boost'
Обратите внимание, чем отличаются эти два типа:
typedef T* value_type;
обратите внимание, что у этого есть тип указателя
typedef T& reference;
notice this is not a pointer type
Это делается для того, чтобы иметь возможность добавлять указатели непосредственно в контейнер, но скрывать указатели внешне.
Также обратите внимание, что
позволяет итерировать объекты по T& , а не T* . Обратите внимание:
iterator i = ...;
i.base();
возвращает итератор, который позволяет итерировать элементы void* ( это очень редко требуется, и вы не должны использовать функциональность, если вы не знаете, что делаете ).
Эта декларация скрывает тип указателя указателя. Вы можете положиться на следующие операции
T* operator->() const;
T& operator*() const;
T* release();
~auto_type();
operator implementation-defined bool ();
Деструктор удаляет хранимый объект с помощью распределителя клонов контейнера (Это объясняет, почему мы не можем использовать std::auto_ptr ). Можно подумать, что это всего лишь std::auto_ptr . Вы также можете вернуть указатель из функции или назначить его другому указателю через функцию move()
auto_type ptr = ...;
auto_type other = boost::ptr_container::move( ptr );
return boost::ptr_container::move( other );
явный обратимый_ptr_container std::auto_ptr< обратимый_ptr_container > r ;
Эффекты: Конструирует контейнер, беря на себя ответственность за предоставленные указатели
шаблон< класс InputIterator > обратимый_ptr_container InputIterator InputIterator последний ;
Требования:(первый, последний] является действительным диапазоном
Эффекты: Конструирует контейнер с клонированным диапазоном(первый, последний]
Постусловия:размер() == std:: расстояние( первый, последний )
~reversible_ptr_container();
Эффекты: удаляет сохраненные объекты через распределитель клонов
Альбом: Nothing
reversible_ptr_container& operator= const reversible_ptr_container& r ;
Эффекты: Назначает клонr
Безопасность: надежная гарантия
шаблон<класс Derived> reversible_ptr_container& оператор = const reversible_ptr_container& r ;
Эффекты: Назначает клонr
Требования:Производный получен изT
Безопасность: сильная гарантия
reversible_ptr_container& operator= std::auto_ptr r ;
Эффекты: удаляет сохраненные объекты, а затем приобретает право собственности на предоставленные указатели
Альбом: Nothing
allocator_type get_allocator() const;
Эффекты: возвращает копию распределителя контейнерного объекта
См. также: недействительность автора
итератор начинается();
const_iterator start() const;
Эффекты: возвращает изменяемый/неизменяемый итератор сзначением_type T
Альбом: Nothing
итератор конец();
const_iterator end() const;
Эффекты: возвращает изменяемый/неизменяемый итератор сзначением_типа T
Альбом: Nothing
reverse_iterator rbegin();
const_reverse_iterator rbegin() const;
Эффекты: возвращает изменяемый / неизменяемый обратный итератор сзначением_типа T
Альбом: Nothing
reverse_iterator rend();
const_reverse_iterator rend() const;
Эффекты: возвращает изменяемый / неизменяемый обратный итератор сзначением_типа T
Альбом: Nothing
auto_type заменить итератор положение, T* x ;
Требования:не пустой [] и x != 0
Эффекты: возвращает объект, на который указывает , и заменяет егоx .
Бросает:bad_ptr_container_operation , если контейнер пуст, иbad_pointer , еслиx == 0 .
Безопасность: сильная гарантия
шаблон< класс U > auto_type замена итератора положение, std::auto_ptr x;
Эффекты:возвращение замена положение, x.release() ;
std::auto_ptr< reversible_ptr_container > клон const;
Эффекты: возвращает глубокую копию контейнера
Броски:std::bad_alloc , если памяти недостаточно для создания клона контейнера
Сложность: линейность
std::auto_ptr< reversible_ptr_container > release();
Эффекты: освобождает право собственности на контейнер. Это отличный способ вернуть контейнер из функции.
Постусловия:пустой() == истинный
Броски:std::bad_alloc , если возвращаемое значение не может быть выделено
Безопасность: сильная гарантия
auto_type release iterator position ;
Требования:не пустой();
Эффекты: освобождает право собственности на указатель, указанный в позиции
размер() на один меньше
Броски:bad_ptr_container_operation , если контейнер пуст
Безопасность: сильная гарантия
Эти функции сравнивают базовый диапазон объектов. Так
operation( const ptr_container& l, const ptr_container& r );
эффект, который можно ожидать от стандартных контейнеров. Следовательно, объекты сравниваются, а не указатели на объекты.
Все контейнеры могут быть сериализованы с помощью Boost.Serialization . Для обзора см. Сериализация контейнеров указателей .
template<class Archive, class T, class CA, class VPC>
void serialize( Archive& ar, reversible_ptr_container<T,CA,VPC>& c, const unsigned int version );
Эффекты: Сохраняет или загружает контейнер в архив.
Замечания: Эта функция называется автоматически операторами потоков в Boost. Сериализация
Безопасность исключения: Загрузка дает основную гарантию
Copyright: Thorsten Ottosen 2004-2007. Use, modification and distribution is subject to the Boost Software License, Version 1.0 (see LICENSE_1_0.txt ).
Статья Boost Pointer Container Library раздела может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: ::