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

Boost Pointer Container Library

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 Pointer Container Library

Class reversible_ptr_container

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

Иерархия:

Навигат:

синопсис:

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'

Semantics

Semantics: typedefs

Обратите внимание, чем отличаются эти два типа:

  • typedefT*value_type;

    • обратите внимание, что у этого есть тип указателя
  • typedefT&reference;

    • notice this is not a pointer type

Это делается для того, чтобы иметь возможность добавлять указатели непосредственно в контейнер, но скрывать указатели внешне.

Также обратите внимание, что

  • typedef...iterator

позволяет итерировать объекты по T&, а не T*. Обратите внимание:

iterator i = ...;
i.base();

возвращает итератор, который позволяет итерировать элементы void* ( это очень редко требуется, и вы не должны использовать функциональность, если вы не знаете, что делаете ).

  • typedef...auto_type

Эта декларация скрывает тип указателя указателя. Вы можете положиться на следующие операции

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 );

Semantics: construct/copy/destroy

  • reversible_ptr_container();

    • Эффекты: Построение пустого контейнера
    • Постусловия:размер()==0
  • эксплицитныйобратимый_ptr_контейнерконстобратимый_ptr_контейнер &р;

    • Эффекты: Построение контейнера путем клонирования всех элементовr
  • шаблон<класс>эксплицитныйобратимый_ptr_контейнерконстобратимый_ptr_контейнер&r

  • Эффекты: Конструирует контейнер путем клонирования всех элементовr
  • Требования:Производныйполучен изT
  • явныйобратимый_ptr_containerstd::auto_ptr<обратимый_ptr_container>r;

    • Эффекты: Конструирует контейнер, беря на себя ответственность за предоставленные указатели
  • шаблон<классInputIterator>обратимый_ptr_containerInputIteratorInputIteratorпоследний;

    • Требования:(первый, последний]является действительным диапазоном
    • Эффекты: Конструирует контейнер с клонированным диапазоном(первый, последний]
    • Постусловия:размер()==std:: расстояние(первый,последний)
  • ~reversible_ptr_container();

    • Эффекты: удаляет сохраненные объекты через распределитель клонов
    • Альбом: Nothing
  • reversible_ptr_container&operator=constreversible_ptr_container&r;

    • Эффекты: Назначает клонr
    • Безопасность: надежная гарантия
  • шаблон<классDerived>reversible_ptr_container&оператор =constreversible_ptr_container&r;

    • Эффекты: Назначает клонr
    • Требования:Производныйполучен изT
    • Безопасность: сильная гарантия
  • reversible_ptr_container&operator=std::auto_ptrr;

    • Эффекты: удаляет сохраненные объекты, а затем приобретает право собственности на предоставленные указатели
    • Альбом: Nothing
  • allocator_typeget_allocator()const;

    • Эффекты: возвращает копию распределителя контейнерного объекта
  • Semantics: iterators

    См. также: недействительность автора

    • итераторначинается();

    • const_iteratorstart()const;

      • Эффекты: возвращает изменяемый/неизменяемый итератор сзначением_typeT
      • Альбом: Nothing
    • итераторконец();

    • const_iteratorend()const;

      • Эффекты: возвращает изменяемый/неизменяемый итератор сзначением_типаT
      • Альбом: Nothing
    • reverse_iteratorrbegin();

    • const_reverse_iteratorrbegin()const;

      • Эффекты: возвращает изменяемый / неизменяемый обратный итератор сзначением_типаT
      • Альбом: Nothing
    • reverse_iteratorrend();

    • const_reverse_iteratorrend()const;

      • Эффекты: возвращает изменяемый / неизменяемый обратный итератор сзначением_типаT
      • Альбом: Nothing

    Semantics: capacity

    • size_typesize()const;

      • Эффекты: возвращает количество сохраненных элементов
      • Альбом: Nothing
    • size_typemax_size()const;

      • Возврат максимального количества хранимых элементов
      • Альбом: Nothing
    • boolempty()const;

      • Возвращает ли контейнер пустой или нет
      • Альбом: Nothing

    Semantics: modifiers

    • voidswapreversible_ptr_container&r;

      • Эффекты: изменение содержания двух контейнеров
      • Альбом: Nothing
    • пустотаясно();

      • Эффекты: Уничтожает весь объект контейнера
      • Постусловия:пустой()==истинный
      • Альбом: Nothing
    • VoidPtrContainer&base();

    • constVoidPtrContainer&base()const;

      • Возврат: ссылка на завернутый контейнер

    Semantics: pointer container requirements

    • auto_typeзаменитьитераторположение,T*x;

      • Требования:непустой []иx!=0
      • Эффекты: возвращает объект, на который указывает, и заменяет егоx.
      • Бросает:bad_ptr_container_operation, если контейнер пуст, иbad_pointer, еслиx==0.
      • Безопасность: сильная гарантия
    • шаблон<классU>auto_typeзаменаитератораположение,std::auto_ptrx;

      • Эффекты:возвращениезаменаположение,x.release();
    • std::auto_ptr<reversible_ptr_container>клонconst;

      • Эффекты: возвращает глубокую копию контейнера
      • Броски:std::bad_alloc, если памяти недостаточно для создания клона контейнера
      • Сложность: линейность
    • std::auto_ptr<reversible_ptr_container>release();

      • Эффекты: освобождает право собственности на контейнер. Это отличный способ вернуть контейнер из функции.
      • Постусловия:пустой()==истинный
      • Броски:std::bad_alloc, если возвращаемое значение не может быть выделено
      • Безопасность: сильная гарантия
    • auto_typereleaseiteratorposition;

      • Требования:непустой();
      • Эффекты: освобождает право собственности на указатель, указанный в позиции
      • размер()на один меньше
      • Броски:bad_ptr_container_operation, если контейнер пуст
      • Безопасность: сильная гарантия

    Semantics: comparison

    Эти функции сравнивают базовый диапазон объектов. Так

    operation( const ptr_container& l, const ptr_container& r );
    

    эффект, который можно ожидать от стандартных контейнеров. Следовательно, объекты сравниваются, а не указатели на объекты.

    Semantics: cloneability

    Semantics: null predicate

    • шаблон<классИтератор>боолявляется_нулемИтераторi;

      • Требования:iявляется действительным отменяемым итератором
      • Возврат:*i.base()==0;

    Semantics: serialization

    Все контейнеры могут быть сериализованы с помощью 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.




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



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


    реклама


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

    Время компиляции файла: 2024-08-30 11:47:00
    2025-05-20 01:25:11/0.007965087890625/1