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

Class template circular_buffer_space_optimized

Boost , The Boost C++ Libraries BoostBook Documentation Subset , Boost.Circular_buffer C++ Reference

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

PrevUpHomeNext

Class template circular_buffer_space_optimized

boost::circular_buffer_space_optimized — Space optimized circular buffer container adaptor. T must be a copyable class or must have an noexcept move constructor and move assignment operator.

Synopsis

// In header: <boost/circular_buffer/space_optimized.hpp>
template<typename T, typename Alloc> 
class circular_buffer_space_optimized :
  private boost::circular_buffer< T, Alloc >
{
public:
  // types
  typedef circular_buffer< T, Alloc >::value_type             value_type;            
  typedef circular_buffer< T, Alloc >::pointer                pointer;               
  typedef circular_buffer< T, Alloc >::const_pointer          const_pointer;         
  typedef circular_buffer< T, Alloc >::reference              reference;             
  typedef circular_buffer< T, Alloc >::const_reference        const_reference;       
  typedef circular_buffer< T, Alloc >::size_type              size_type;             
  typedef circular_buffer< T, Alloc >::difference_type        difference_type;       
  typedef circular_buffer< T, Alloc >::allocator_type         allocator_type;        
  typedef circular_buffer< T, Alloc >::const_iterator         const_iterator;        
  typedef circular_buffer< T, Alloc >::iterator               iterator;              
  typedef circular_buffer< T, Alloc >::const_reverse_iterator const_reverse_iterator;
  typedef circular_buffer< T, Alloc >::reverse_iterator       reverse_iterator;      
  typedef circular_buffer< T, Alloc >::array_range            array_range;           
  typedef circular_buffer< T, Alloc >::const_array_range      const_array_range;     
  typedef circular_buffer< T, Alloc >::param_value_type       param_value_type;      
  typedef circular_buffer< T, Alloc >::rvalue_type            rvalue_type;           
  typedef cb_details::capacity_control< size_type >           capacity_type;         
  // construct/copy/destruct
  explicit circular_buffer_space_optimized(const allocator_type & = allocator_type()) noexcept;
  explicit circular_buffer_space_optimized(capacity_type, 
                                           const allocator_type & = allocator_type());
  circular_buffer_space_optimized(capacity_type, param_value_type, 
                                  const allocator_type & = allocator_type());
  circular_buffer_space_optimized(capacity_type, size_type, param_value_type, 
                                  const allocator_type & = allocator_type());
  circular_buffer_space_optimized(const circular_buffer_space_optimized< T, Alloc > &);
  circular_buffer_space_optimized(circular_buffer_space_optimized< T, Alloc > &&) noexcept;
  template<typename InputIterator> 
    circular_buffer_space_optimized(InputIterator, InputIterator, 
                                    const allocator_type & = allocator_type());
  template<typename InputIterator> 
    circular_buffer_space_optimized(capacity_type, InputIterator, 
                                    InputIterator, 
                                    const allocator_type & = allocator_type());
  circular_buffer_space_optimized< T, Alloc > & 
  operator=(const circular_buffer_space_optimized< T, Alloc > &);
  circular_buffer_space_optimized< T, Alloc > & 
  operator=(circular_buffer_space_optimized< T, Alloc > &&) noexcept;
  // public member functions
  bool full() const noexcept;
  size_type reserve() const noexcept;
  const capacity_type & capacity() const noexcept;
  void set_capacity(const capacity_type &);
  void resize(size_type, param_value_type = value_type());
  void rset_capacity(const capacity_type &);
  void rresize(size_type, param_value_type = value_type());
  void assign(size_type, param_value_type);
  void assign(capacity_type, size_type, param_value_type);
  template<typename InputIterator> void assign(InputIterator, InputIterator);
  template<typename InputIterator> 
    void assign(capacity_type, InputIterator, InputIterator);
  void swap(circular_buffer_space_optimized< T, Alloc > &) noexcept;
  void push_back(param_value_type);
  void push_back(rvalue_type);
  void push_back();
  void push_front(param_value_type);
  void push_front(rvalue_type);
  void push_front();
  void pop_back();
  void pop_front();
  iterator insert(iterator, param_value_type);
  iterator insert(iterator, rvalue_type);
  iterator insert(iterator);
  void insert(iterator, size_type, param_value_type);
  template<typename InputIterator> 
    void insert(iterator, InputIterator, InputIterator);
  iterator rinsert(iterator, param_value_type);
  iterator rinsert(iterator, rvalue_type);
  iterator rinsert(iterator);
  void rinsert(iterator, size_type, param_value_type);
  template<typename InputIterator> 
    void rinsert(iterator, InputIterator, InputIterator);
  iterator erase(iterator);
  iterator erase(iterator, iterator);
  iterator rerase(iterator);
  iterator rerase(iterator, iterator);
  void clear();
  // private member functions
  void adjust_min_capacity();
  size_type ensure_reserve(size_type, size_type) const;
  void check_low_capacity(size_type = 1);
  void check_high_capacity();
  void reduce_capacity(const true_type &);
  void reduce_capacity(const false_type &);
  template<typename IntegralType> 
    void insert(const iterator &, IntegralType, IntegralType, 
                const true_type &);
  template<typename Iterator> 
    void insert(const iterator &, Iterator, Iterator, const false_type &);
  template<typename IntegralType> 
    void rinsert(const iterator &, IntegralType, IntegralType, 
                 const true_type &);
  template<typename Iterator> 
    void rinsert(const iterator &, Iterator, Iterator, const false_type &);
  // private static functions
  static size_type init_capacity(const capacity_type &, size_type);
  template<typename IntegralType> 
    static size_type 
    init_capacity(const capacity_type &, IntegralType, IntegralType, 
                  const true_type &);
  template<typename Iterator> 
    static size_type 
    init_capacity(const capacity_type &, Iterator, Iterator, 
                  const false_type &);
  template<typename InputIterator> 
    static size_type 
    init_capacity(const capacity_type &, InputIterator, InputIterator, 
                  const std::input_iterator_tag &);
  template<typename ForwardIterator> 
    static size_type 
    init_capacity(const capacity_type &, ForwardIterator, ForwardIterator, 
                  const std::forward_iterator_tag &);
};

Description

circular_buffer_space_optimized public types

  1. typedefcb_details:: capacity_control<size_type>capacity_type;

    Контроллер емкости пространственного оптимизированного кругового буфера.

    Смотрите также:

    емкость_контроль в деталях.hpp.

    <class capacity_control
    {
    size_type m_capacity; // Available capacity.
    size_type m_min_capacity; // Minimum capacity.
    public:
    capacity_control(size_type capacity, size_type min_capacity = 0)
    : m_capacity(capacity), m_min_capacity(min_capacity)
    {};
    size_type capacity() const { return m_capacity; }
    size_type min_capacity() const { return m_min_capacity; }
    operator size_type() const { return m_capacity; }
    };
    >

    Всегда<capacity >= min_capacity>

    .

    <capacity()>представляет емкость<circular_buffer_space_optimized>, а<min_capacity()>определяет минимальный выделенный размер его внутреннего буфера.

    Конструктор преобразования<capacity_control>допускает неявное преобразование из<size_type>-подобных типов, что обеспечивает совместимость создания экземпляра<circular_buffer_space_optimized>с другими контейнерами STL.

    С другой стороны, оператор<size_type()>обеспечивает неявное преобразование в<size_type>, что позволяет рассматривать емкость<circular_buffer_space_optimized>так же, как и в<circular_buffer>

    .

circular_buffer_space_optimized public construct/copy/destruct

  1. <
    explicitcircular_buffer_space_optimized(constallocator_type&alloc=allocator_type())noexcept;
    >Создать пустое пространство оптимизированного кругового буфера с нулевой емкостью.

    Сложность. Постоянство.

    [Warning]Предупреждение

    Со времени версии 1.36 Boost поведение этого конструктора изменилось. Теперь он создает круглый буфер с нулевой емкостью.

    Параметры:

    <alloc>

    Бросок:

    <alloc>

    Распределитель.

    Пост-условия:

    <capacity().capacity() == 0 && capacity().min_capacity() == 0 && size() == 0>

    Ничего.
  2. <
    explicitcircular_buffer_space_optimized(capacity_typecapacity_ctrl,
                                            constallocator_type&alloc=allocator_type());
    >Создать пустое пространство оптимизированного кругового буфера с заданной емкостью.

    Сложность. Константа.

    Параметры:

    <alloc>

    <capacity_ctrl>

    Контроллер емкости, представляющий максимальное количество элементов, которые могут храниться в<circular_buffer_space_optimized>и минимальный выделенный размер внутреннего буфера.

    <capacity() == capacity_ctrl && size() == 0>

    Количество выделенной памяти во внутреннем буфере составляет<capacity_ctrl.min_capacity()>.

    Бросок:

    Ошибка распределения, если память исчерпана (<std::bad_alloc>, если используется стандартный распределитель).
  3. <
    circular_buffer_space_optimized(capacity_typecapacity_ctrl,
                                   param_value_typeitem,
                                   constallocator_type&alloc=allocator_type());
    >Создать полный пространственный оптимизированный круговой буфер с заданной емкостью, заполненный<capacity_ctrl.capacity()>копиями<item>.

    Сложность. Линейный [в<capacity_ctrl.capacity()>.

  4. Параметры:

    <alloc>

    <capacity_ctrl>

    Контроллер емкости, представляющий максимальное количество элементов, которые могут храниться в<circular_buffer_space_optimized>и минимальный выделенный размер внутреннего буфера.

    <item>

    Созданный элемент<circular_buffer_space_optimized>будет заполнен.

    Последующие условия:

    <capacity() == capacity_ctrl && full() && (*this)[0] == item && (*this)[1] == item && ... && (*this) [capacity_ctrl.capacity() - 1] == item>

    Количество выделенной памяти во внутреннем буфере составляет<capacity_ctrl.capacity()>.

    Бросок:

    Ошибка распределения, если память исчерпана (<std::bad_alloc>, если используется стандартный распределитель).<T::T(const T&)>бросков.
  5. <
    circular_buffer_space_optimized(capacity_typecapacity_ctrl,size_typen,
                                   param_value_typeitem,
                                   constallocator_type&alloc=allocator_type());
    >Создать пространственный оптимизированный круговой буфер с заданной емкостью, заполненный<n>копиями<item>

    Сложность. Линейный [в<n>.

    Параметры:

    <alloc>

    <capacity_ctrl>

    Контроллер емкости, представляющий максимальное количество элементов, которые могут храниться в<circular_buffer_space_optimized>и минимальный выделенный размер внутреннего буфера.

    <item>

    Созданный элемент<circular_buffer_space_optimized>будет заполнен.

    <n>

    Количество созданных элементов<circular_buffer_space_optimized>будет заполнен.

    Требуется:

    <capacity_ctrl.capacity() >= n>

    Последующие условия:

    <capacity() == capacity_ctrl && size() == n && (*this)[0] == item && (*this)[1] == item && ... && (*this)[n - 1] == item>

    Количество выделенной памяти во внутреннем буфере составляет<max[n, capacity_ctrl.min_capacity()]>.

    Броски:

    Ошибка распределения, если память исчерпана (<std::bad_alloc>, если используется стандартный распределитель).<T::T(const T&)>бросок.
  • <
    circular_buffer_space_optimized(constcircular_buffer_space_optimized<T,Alloc>&cb);
    >Конструктор копий.

    Создает копию указанного<circular_buffer_space_optimized>.

    Сложность. Линейный [в размере<cb>.

    <cb><circular_buffer_space_optimized>подлежит копированию.

  • <*this == cb>

    Количество выделенной памяти во внутреннем буфере составляет<cb.size()>.

    Броски:

    Ошибка распределения, если память исчерпана (<std::bad_alloc>, если используется стандартный распределитель).<T::T(const T&)>бросок.
  • <
    circular_buffer_space_optimized(circular_buffer_space_optimized<T,Alloc>&&cb)noexcept;
    >Конструктор движения.

    Перемещение конструирует<circular_buffer_space_optimized>из<cb>, оставляя<cb>пустым.

    Константа. 

    Параметры:

    <cb>

    <circular_buffer>до значения «воровать».

    Требуется:

    Компилятор C++ с поддержкой ссылок на rvalue.

    <cb.empty()>

    Броски:

    Ничего.
  • <
    template<typenameInputIterator>
     circular_buffer_space_optimized(InputIteratorfirst,InputIteratorlast,
                                     constallocator_type&alloc=allocator_type());
    >Создать полный пространственный оптимизированный круговой буфер, заполненный копией диапазона.

    Сложность. Линейный (в<std::distance(first, last)>.

    Параметры:

    <alloc>

    <first>

    Начало диапазона для копирования.

    <last>

    Конец диапазона для копирования.

    Требования:

    Реальный диапазон<[first, last)>.
    <first>и<last>должны соответствовать требованиямИтератор ввода.

    Пост-условия:

    <capacity().capacity() == std::distance(first, last) && capacity().min_capacity() == 0 && full() && (*this)[0]== *first && (*this)[1] == *(first + 1) && ... && (*this)[std::distance(first, last) - 1] == *(last - 1)>

    Количество выделенной памяти во внутреннем буфере<std::distance(first, last)>.

    Броски:

    Ошибка распределения, если память исчерпана<std::bad_alloc>, если используется стандартный распределитель.<T::T(const T&)>бросок или ничего, если<T::T(T&&)>не является исключением и<InputIterator>является итератором движения.
  • <
    template<typenameInputIterator>
     circular_buffer_space_optimized(capacity_typecapacity_ctrl,
                                     InputIteratorfirst,InputIteratorlast,
                                     constallocator_type&alloc=allocator_type());
    >Создать пространственный оптимизированный круговой буфер с заданной емкостью (и минимальным гарантированным количеством выделенной памяти), заполненный копией диапазона.

    Сложность. Линейный (в<std::distance(first, last)>; в<min[capacity_ctrl.capacity(), std::distance(first, last)]>, если<InputIterator>являетсяRandomAccessIterator.

    Параметры:

    <alloc>

    <capacity_ctrl>

    Контроллер емкости, представляющий максимальное количество элементов, которые могут храниться в<circular_buffer_space_optimized>и минимальный выделенный размер внутреннего буфера.

    <first>

    Начало диапазона должно быть скопировано.

    <last>

    Конец диапазона должен быть скопирован.

    Требуется:

    Действительный диапазон<[first, last)>.
    <first>и<last>должны соответствовать требованиямИтератор ввода.

    <capacity() == capacity_ctrl && size() <= std::distance(first, last) && (*this)[0]== (last - capacity_ctrl.capacity()) && (*this)[1] == *(last - capacity_ctrl.capacity() + 1) && ... && (*this)[capacity_ctrl.capacity() - 1] == *(last - 1)>

    Если число предметов, подлежащих копированию из диапазона<[first, last)>, больше указанного<capacity_ctrl.capacity()>, то копируются только элементы из диапазона<[last - capacity_ctrl.capacity(), last)>.

    Количество выделенной памяти во внутреннем буфере<max[capacity_ctrl.min_capacity(), min[capacity_ctrl.capacity(), std::distance(first, last)]]>.

    Броски:

    Ошибка распределения, если память исчерпана<std::bad_alloc>, если используется стандартный распределитель.<T::T(const T&)>бросок
  • <
    circular_buffer_space_optimized<T,Alloc>&
    operator=(constcircular_buffer_space_optimized<T,Alloc>&cb);
    >Правообладатель.

    Делает это<circular_buffer_space_optimized>копией указанного<circular_buffer_space_optimized>.

    Безопасность исключения. Сильный.

    Итератор Инвалидация. Инвалидирует все итераторы, указывающие на это<circular_buffer_space_optimized>(кроме итераторов, равных<end()>.

    Сложность. Линейный (в размере<cb>.

    См. также:

    <assign(size_type, const_reference)>,<assign(capacity_type, size_type, const_reference)>,<assign(InputIterator, InputIterator)>,<assign(capacity_type, InputIterator, InputIterator)>

    Параметры:

    <cb>

    <circular_buffer_space_optimized><circular_buffer_space_optimized>подлежат копированию.

    Последующие условия:

    <*this == cb>

    Количество выделенной памяти во внутреннем буфере составляет<cb.size()>.

    Броски:

    Ошибка распределения, если память исчерпана (<std::bad_alloc>, если используется стандартный распределитель).<T::T(const T&)>бросков.
  • <
    circular_buffer_space_optimized<T,Alloc>&
    operator=(circular_buffer_space_optimized<T,Alloc>&&cb)noexcept;
    >Перемещение присваивает содержание<cb><*this>, оставляя<cb>пустым.

    Сложность. Константа.

    Параметры:

    <cb>

    <circular_buffer>до значения «воровать».

    Требуется:

    Компилятор C++ с поддержкой ссылок на rvalue.

    Последующие условия:

    <cb.empty()>

    Броски:

    Ничего.
  • circular_buffer_space_optimized public member functions

    1. <
      boolfull()constnoexcept;
      >Полно ли<circular_buffer_space_optimized>?

      Безопасность в отношении исключений. Без броска.

      Инвалидация итератора. Не делает недействительными никакие итераторы.

      Сложность. Константа (в размере<circular_buffer_space_optimized>.

      См. также:

      Возвращает:

      <true>, если количество элементов, хранящихся в<circular_buffer_space_optimized>, равно емкости<circular_buffer_space_optimized>;<false>в противном случае.

      Бросает:

      Ничего.
    2. <
      size_typereserve()constnoexcept;
      >Получить максимальное количество элементов, которые могут быть вставлены в<circular_buffer_space_optimized>без перезаписи каких-либо из уже сохраненных элементов.

      Безопасность в отношении исключений. Без броска.

      Инвалидация итератора. Не отменяет итераторов.

      Сложность. Константа [в размере<circular_buffer_space_optimized>.

      См. также:

      <capacity()>,<size()>,<max_size()>

      Возвращение:

      <capacity().capacity() - size()>

      Броски:

      Ничего.
    3. <
      constcapacity_type&capacity()constnoexcept;
      >Получить емкость<circular_buffer_space_optimized>.

      Безопасность исключения. Без броска.

      Итератор Инвалидация. Не отменяет итераторов.

      Сложность. Константа (в размере<circular_buffer_space_optimized>.

      См. также:

      <reserve()>,<size()>,<max_size()>,<set_capacity(const capacity_type&)>

      Возвращение:

      Контроллер емкости, представляющий максимальное количество элементов, которые могут храниться в<circular_buffer_space_optimized>и минимальный выделенный размер внутреннего буфера.

      Броски:

      Ничего.
    4. <
      voidset_capacity(constcapacity_type&capacity_ctrl);
      >Изменить емкость (и минимальное гарантированное количество выделенной памяти)<circular_buffer_space_optimized>.

      Безопасность исключения. Сильный.

      Итератор Инвалидация. Инвалидирует все итераторы, указывающие на<circular_buffer_space_optimized>(кроме итераторов, равных<end()>.

      Сложность. Линейный<min[size(), capacity_ctrl.capacity()]>.

      [Note]Примечание

      Чтобы явно очистить дополнительно выделенную память, используйте техникутермоусадка в соответствие:

      <boost::circular_buffer_space_optimized<int> cb(1000);
      ...
      boost::circular_buffer_space_optimized<int>(cb).swap(cb);
      >



      Для получения дополнительной информации о технике термоусадки в STL см.http://www.gotw.ca/gotw/054.htm.

    См. также:

    <rset_capacity(const capacity_type&)>,<resize(size_type, const_reference)>

    Параметры:

    <capacity_ctrl>

    Новый контроллер мощности.

    Последующие условия:

    <capacity() == capacity_ctrl && size() <= capacity_ctrl.capacity()>

    Если текущее число элементов, хранящихся в<circular_buffer_space_optimized>, больше желаемой новой емкости, то число<[size() - capacity_ctrl.capacity()]>последнихэлементов будет удалено и новый размер будет равен<capacity_ctrl.capacity()>.

    Если текущее число элементов, хранящихся в<circular_buffer_space_optimized>, ниже новой емкости, то количество выделенной памяти во внутреннем буфере может быть размещено по мере необходимости, но оно никогда не опускается ниже<capacity_ctrl.min_capacity()>.

    Броски:

    Ошибка распределения, если память исчерпана,<std::bad_alloc>, если используется стандартный распределитель. Что бы ни бросало<T::T(const T&)>, если<T::T(T&&)>не является исключением
  • <
    voidresize(size_typenew_size,param_value_typeitem=value_type());
    >Изменить размер<circular_buffer_space_optimized>.

    Безопасность в отношении исключений. 

    Инвалидация итераторов. Инвалидирует все итераторы, указывающие на<circular_buffer_space_optimized>[за исключением итераторов, равных<end()>.

    Сложность. Линейный

    См. также:

    Элемент<circular_buffer_space_optimized>будет заполнен, чтобы получить требуемый размер. [См.Эффект.]

    <new_size>

    Новый размер.

    Пост-условия:

    <size() == new_size && capacity().capacity() >= new_size>

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

    Если текущее число элементов, хранящихся в<circular_buffer_space_optimized>, больше желаемого нового размера, то число<[size() - new_size]>последнихэлементов будет удалено. (Вместимость останется неизменной.)

    Количество выделенной памяти во внутреннем буфере может быть размещено по мере необходимости.

    Броски:

    Ошибка распределения, если память исчерпана (1534) при использовании стандартного распределителя. Что бы ни бросил<T::T(const T&)>.
  • <
    voidrset_capacity(constcapacity_type&capacity_ctrl);
    >Изменить емкость (и минимальное гарантированное количество выделенной памяти)<circular_buffer_space_optimized>.

    Безопасность исключения. Сильная.

    Итератор Инвалидация. Инвалидирует все итераторы, указывающие на<circular_buffer_space_optimized>(за исключением итераторов, равных<end()>.

    Сложность.ږ]

    См. также:

    <set_capacity(const capacity_type&)>,<rresize(size_type, const_reference)>

    Параметры:

    <capacity_ctrl>

    Новый контроллер мощности.

    Последующие условия:

    <capacity() == capacity_ctrl && size() <= capacity_ctrl>

    Если текущее число элементов, хранящихся в<circular_buffer_space_optimized>, больше желаемой новой емкости, то число<[size() - capacity_ctrl.capacity()]>первыхэлементов будет удалено и новый размер будет равен<capacity_ctrl.capacity()>.

    Если текущее число элементов, хранящихся в<circular_buffer_space_optimized>, ниже новой емкости, то количество выделенной памяти во внутреннем буфере может быть размещено по мере необходимости, но оно никогда не будет опускаться ниже<capacity_ctrl.min_capacity()>.

    Бросок:

    Ошибка распределения, если память исчерпана (1678) при использовании стандартного распределителя. Все, что<T::T(const T&)>бросает или ничего, если<T::T(T&&)>не является исключением
  • <
    voidrresize(size_typenew_size,param_value_typeitem=value_type());
    >Изменить размер<circular_buffer_space_optimized>.

    Безопасность исключения. Базовый.

    Итератор Инвалидация. Инвалидирует все итераторы, указывающие на<circular_buffer_space_optimized>(кроме итераторов, равных<end()>.

    Сложность. Линейный [в новом размере<circular_buffer_space_optimized>.

    См. также:

    <resize(size_type, const_reference)>,<rset_capacity(const capacity_type&)>

    Параметры:

    <item>

    Элемент<circular_buffer_space_optimized>будет заполнен, чтобы получить требуемый размер. [См.Эффект.]

    <new_size>

    Новый размер.

    Последующие условия:

    <size() == new_size && capacity().capacity() >= new_size>

    Если новый размер больше текущего, то копии<item>будут вставлены нафронте<circular_buffer_space_optimized>для достижения желаемого размера. В случае, если результирующий размер превышает текущую мощность, мощность будет установлена на<new_size>.

    Если текущее число элементов, хранящихся в<circular_buffer_space_optimized>, больше желаемого нового размера, то число<[size() - new_size]>первыхэлементов будет удалено. (Вместимость останется неизменной.)

    Количество выделенной памяти во внутреннем буфере может быть размещено по мере необходимости.

    Броски:

    Ошибка распределения, если память исчерпана<std::bad_alloc>, если используется стандартный распределитель. Что бы ни бросил<T::T(const T&)>.
  • <
    voidassign(size_typen,param_value_typeitem);
    >Назначение<n>предметов в пространстве оптимизированного кругового буфера.

    Содержание<circular_buffer_space_optimized>будет удалено и заменено<n>копиями<item>.

    Безопасность исключения. Основы.

    Итератор Инвалидация. Инвалидирует все итераторы, указывающие на<circular_buffer_space_optimized>(кроме итераторов, равных<end()>.

    Сложность. Линейный [в<n>.

    См. также:

    <operator=>,<assign(capacity_type, size_type, const_reference)>,<assign(InputIterator, InputIterator)>,<assign(capacity_type, InputIterator, InputIterator)>

    Параметры:

    <item>

    Элемент<circular_buffer_space_optimized>будет заполнен.

    <n>

    Количество элементов<circular_buffer_space_optimized>будет заполнено.

    Последующие условия:

    <capacity().capacity() == n && capacity().min_capacity() == 0 && size() == n && (*this)[0] == item && (*this)[1] == item && ... && (*this) [n - 1] == item>

    Количество выделенной памяти во внутреннем буфере<n>.

    Броски:

    Ошибка распределения, если память исчерпана (<std::bad_alloc>, если используется стандартный распределитель). Что бы ни бросил<T::T(const T&)>.
  • <
    voidassign(capacity_typecapacity_ctrl,size_typen,param_value_typeitem);
    >Назначение<n>элементов в пространстве оптимизированного кругового буфера с указанием емкости.

    Мощность<circular_buffer_space_optimized>будет установлена на указанное значение и содержание<circular_buffer_space_optimized>будет удален и заменен<n>копиями<item>.

    Безопасность исключения. Базовый.

    Итератор Инвалидация. Инвалидирует все итераторы, указывающие на<circular_buffer_space_optimized>(кроме итераторов, равных<end()>.

    Сложность. ]Линейный [в<n>.

    См. также:

    <operator=>,<assign(size_type, const_reference)>,<assign(InputIterator, InputIterator)>,<assign(capacity_type, InputIterator, InputIterator)>

    Новый контроллер мощности.

    <item>

    Элемент<circular_buffer_space_optimized>будет заполнен.

    <n>

    Число элементов<circular_buffer_space_optimized>будет заполнено.

    Требуется:

    <capacity_ctrl.capacity() >= n>

    Постусловия:

    <capacity() == capacity_ctrl && size() == n && (*this)[0] == item && (*this)[1] == item && ... && (*this) [n - 1] == item>

    Количество выделенной памяти будет<max[n, capacity_ctrl.min_capacity()]>.

    Броски:

    Ошибка распределения, если память исчерпана<std::bad_alloc>, если используется стандартный распределитель. Что бы ни бросил<T::T(const T&)>.
  • <
    template<typenameInputIterator>
     voidassign(InputIteratorfirst,InputIteratorlast);
    >Назначить копию диапазона в пространстве оптимизированного кругового буфера.

    Содержание<circular_buffer_space_optimized>будет удалено и заменено копиями элементов из указанного диапазона.

    Безопасность исключения. Базовый.

    Итератор Инвалидация. Недействительны все итераторы, указывающие на<circular_buffer_space_optimized>(кроме итераторов, равных<end()>.

    Сложность. Линейный [в<std::distance(first, last)>.

    См. также:

    <operator=>,<assign(size_type, const_reference)>,<assign(capacity_type, size_type, const_reference)>,<assign(capacity_type, InputIterator, InputIterator)>

    Параметры:

    <first>

    Начало диапазона должно быть скопировано.

    <last>

    Конец диапазона должен быть скопирован.

    Требуется:

    Действительный диапазон<[first, last)>.
    <first>и<last>должны соответствовать требованиямInputIterator.

    Последующие условия:

    <capacity().capacity() == std::distance(first, last) && capacity().min_capacity() == 0 && size() == std::distance(first, last) && (*this)[0]== *first && (*this)[1] == *(first + 1) && ... && (*this)[std::distance(first, last) - 1] == *(last - 1)>

    Количество выделенной памяти во внутреннем буфере<std::distance(first, last)>.

    Броски:

    Ошибка распределения, если память исчерпана (<std::bad_alloc>, если используется стандартный распределитель). Что бы<T::T(const T&)>ни бросало, или ничего, если<T::T(T&&)>не является исключением и<InputIterator>является итератором движения.
  • <
    template<typenameInputIterator>
     voidassign(capacity_typecapacity_ctrl,InputIteratorfirst,
                 InputIteratorlast);
    >Назначить копию диапазона в пространстве оптимизированного кругового буфера с указанием емкости.

    Емкость<circular_buffer_space_optimized>будет установлена на указанное значение и содержание<circular_buffer_space_optimized>будет удалено и заменено копиями элементов из указанного диапазона.

    Безопасность исключения. Базовая.

    [23400]Итератор Инвалидация. Инвалидирует все итераторы, указывающие на<circular_buffer_space_optimized>(кроме итераторов, равных<end()>.

    Сложность. Линейный [в<std::distance(first, last)>; в<min[capacity_ctrl.capacity(), std::distance(first, last)]>, если<InputIterator>являетсяИтератор случайного доступа

    См. также:

    <operator=><assign(size_type, const_reference)>,<assign(capacity_type, size_type, const_reference)>,<assign(InputIterator, InputIterator)>

    <assign(capacity_type, size_type, const_reference)>,<assign(InputIterator, InputIterator)>

    [ Параметры:

    <capacity_ctrl>

    Новый контроллер мощности.

    <first>

    Начало диапазона для копирования.

    <last>

    Конец диапазона для копирования.

    Требования:

    Действительный диапазон<[first, last)>.
    <first>и<last>должны соответствовать требованиямИтератор ввода.

    Последующие условия:

    <capacity() == capacity_ctrl && size() <= std::distance(first, last) && (*this)[0]== *(last - capacity) && (*this)[1] == *(last - capacity + 1) && ... && (*this)[capacity - 1] == *(last - 1)>

    Если количество предметов, подлежащих копированию из диапазона<[first, last)>, больше указанного<capacity>, то копируются только элементы из диапазона<[last - capacity, last)>.

    Количество выделенной памяти во внутреннем буфере составляет<max[std::distance(first, last), capacity_ctrl.min_capacity()]>.

    Броски:

    Ошибка распределения, если память исчерпана (<std::bad_alloc>, если используется стандартный распределитель). Что бы ни бросало<T::T(const T&)>или ничего, если<T::T(T&&)>не является исключением и<InputIterator>является итератором движения.
  • <
    voidswap(circular_buffer_space_optimized<T,Alloc>&cb)noexcept;
    >Измените содержание двух пространственно-оптимизированных круговых буферов.

    Безопасность в отношении исключений. Без броска.

    Инвалидация итератора. Инвалидирует все итераторы обоих<circular_buffer_space_optimized>2559 контейнеров. (С другой стороны, итераторы по-прежнему указывают на те же элементы, но в другом контейнере. Если вы хотите полагаться на эту функцию, вы должны отключить поддержку __debug_, в противном случае утверждение сообщит об ошибке, если используется такой недействительный итератор.

    Сложность. Постоянная [в размере<circular_buffer_space_optimized>.

    См. также:

    <swap(circular_buffer<T, Alloc>&, circular_buffer<T, Alloc>&)>,<swap(circular_buffer_space_optimized<T, Alloc>&, circular_buffer_space_optimized<T, Alloc>&)>

    <circular_buffer_space_optimized>, содержание которого будет изменено.

    Постусловия:

    <this>содержат элементы<cb>и наоборот; емкость и количество выделенной памяти во внутреннем буфере<this>равны емкости и количеству выделенной памяти<cb>и наоборот.

    Броски:

    Ничего.
  • <
    voidpush_back(param_value_typeitem);
    >Вставить новый элемент в конце пространства оптимизированного кругового буфера.

    Безопасность исключения. Базовый.

    Итератор Инвалидация. Инвалидирует все итераторы, указывающие на<circular_buffer_space_optimized>(за исключением итераторов, равных<end()>

    Сложность. Линейный [размер<circular_buffer_space_optimized>

    См. также:

    <push_front(const_reference)><pop_back()>,<pop_front()>

    Параметры:

    <item>

    Элемент должен быть вставлен.

    Последующие условия:

    , если<capacity().capacity() > 0>, то<back() == item>
    Если<circular_buffer_space_optimized>заполнен, первый элемент будет удален. Если вместимость<0>, ничего не будет вставлено.

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

    Броски:

    Ошибка распределения, если память исчерпана (<std::bad_alloc>, если используется стандартный распределитель).<T::T(const T&)>бросок
  • <
    voidpush_back(rvalue_typeitem);
    >Вставить новый элемент в конце пространства оптимизированного кругового буфера.

    Безопасность в отношении исключений. Базовый.

    Итератор Инвалидация. Инвалидирует все итераторы, указывающие на<circular_buffer_space_optimized>(кроме итераторов, равных<end()>.

    Сложность. Линейный (в размере<circular_buffer_space_optimized>.

    См. также:

    <push_front(const_reference)>,<pop_back()>,<pop_front()>

    Параметры:

    <item>

    Элемент должен быть вставлен.

    , если<capacity().capacity() > 0>, то<back() == item>
    Если<circular_buffer_space_optimized>заполнен, первый элемент будет удален. Если вместимость<0>, ничего не будет вставлено.

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

    Броски:

    Ошибка распределения, если память исчерпана (<std::bad_alloc>, если используется стандартный распределитель).
  • <
    voidpush_back();
    >Вставить новый элемент в конце пространства оптимизированного кругового буфера.

    Безопасность исключения. Основы.

    Итератор Инвалидация. Инвалидирует все итераторы, указывающие на<circular_buffer_space_optimized>(кроме итераторов, равных<end()>.

    Сложность. Линейный (в размере<circular_buffer_space_optimized>.

    См. также:

    <push_front(const_reference)>,<pop_back()>,<pop_front()>

    Последующие условия:

    если<capacity().capacity() > 0>то<back() == item>
    Если<circular_buffer_space_optimized>заполнен, первый элемент будет удален. Если вместимость<0>, ничего не будет вставлено.

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

    Броски:

    Ошибка распределения, если память исчерпана (<std::bad_alloc>, если используется стандартный распределитель). Что бы ни бросил<T::T()>. 2883 или ничего, если 2884 не является исключением.
  • <
    voidpush_front(param_value_typeitem);
    >Включить новый элемент в начале пространственного оптимизированного кругового буфера.

    Безопасность в отношении исключений. Базовый.

    Итератор Инвалидация. Инвалидирует все итераторы, указывающие на<circular_buffer_space_optimized>(кроме итераторов, равных<end()>.

    Сложность. Линейный (размер<circular_buffer_space_optimized>.

    См. также:

    <push_back(const_reference)>,<pop_back()>

    Параметры:

    <item>

    Элемент должен быть вставлен.

    Последующие условия:

    , если<capacity().capacity() > 0>, то<front() == item>
    Если<circular_buffer_space_optimized>заполнен, последний элемент будет удален. Если вместимость<0>, ничего не будет вставлено.

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

    Броски:

    Ошибка распределения, если память исчерпана (2964), если используется стандартный распределитель. Все, что<T::T(const T&)>бросает.
  • <
    voidpush_front(rvalue_typeitem);
    >Включить новый элемент в начале пространства оптимизированного кругового буфера.

    Безопасность в отношении исключений. Основы.

    Итератор Инвалидация. Инвалидирует все итераторы, указывающие на<circular_buffer_space_optimized>(кроме итераторов, равных<end()>.

    Сложность. Линейный [размер<circular_buffer_space_optimized>.

    См. также:

    <push_back(const_reference)>,<pop_back()>,<pop_front()>

    <end()>[ Элемент должен быть вставлен.

    Последующие условия:

    , если<capacity().capacity() > 0>, то<front() == item>
    Если<circular_buffer_space_optimized>заполнен, последний элемент будет удален. Если вместимость<0>, ничего не будет вставлено.

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

    Броски:

    Ошибка распределения, если память исчерпана (<std::bad_alloc>, если используется стандартный распределитель). 3078 или ничего, если<T::T(T&&)>не является исключением.
  • <
    voidpush_front();
    >Включить новый элемент в начале пространства оптимизированного кругового буфера.

    Безопасность в отношении исключений. 

    Инвалидация итераторов. Инвалидирует все итераторы, указывающие на<circular_buffer_space_optimized>[за исключением итераторов, равных<end()>

    Сложность. Линейный [размер<circular_buffer_space_optimized>

    См. также:

    <push_back(const_reference)>,<pop_back()>,<pop_front()>

    [3236 Последующие условия:

    если<capacity().capacity() > 0>то<front() == item>
    Если<circular_buffer_space_optimized>заполнен, последний элемент будет удален. Если вместимость<0>, ничего не будет вставлено.

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

    Броски:

    Ошибка распределения, если память исчерпана (<std::bad_alloc>, если используется стандартный распределитель). Что бы ни бросил<T::T()>. Что бы<T::T(const T&)>ни бросало, или ничего, если<T::T(T&&)>не является исключением.
  • <
    voidpop_back();
    >Удалить последний элемент из пространства оптимизированного кругового буфера.

    Безопасность в отношении исключений. Базовая.

    Инвалидация итератора. Инвалидирует все итераторы, указывающие на<circular_buffer_space_optimized>(за исключением итераторов, равных<end()>.

    Сложность. Линейный (в размере<circular_buffer_space_optimized>.

    См. также:

    <pop_front()>,<push_back(const_reference)>,<push_front(const_reference)>

    Требуется:

    <!empty()>

    Последующие условия:

    Последний элемент удален из<circular_buffer_space_optimized>

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

    Броски:

    Ошибка распределения, если память исчерпана (<std::bad_alloc>, если используется стандартный распределитель).
  • <
    voidpop_front();
    >Удалить первый элемент из пространства оптимизированного кругового буфера.

    Безопасность в отношении исключений. Базовый.

    Итератор Инвалидация. Инвалидирует все итераторы, указывающие на<circular_buffer_space_optimized>(за исключением итераторов, равных<end()>.

    Сложность. Линейный [размер<circular_buffer_space_optimized>.]

    См. также:

    <pop_back()>,<push_back(const_reference)>,<push_front(const_reference)>

    Требуется:

    <!empty()>

    Последующие условия:

    Первый элемент удален из<circular_buffer_space_optimized>

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

    Броски:

    Ошибка распределения, если память исчерпана (<std::bad_alloc>, если используется стандартный распределитель).
  • <
    iteratorinsert(iteratorpos,param_value_typeitem);
    >Включить элемент в указанном положении.

    Безопасность в отношении исключений. Базовая.

    Инвалидация итератора. Инвалидирует все итераторы, указывающие на<circular_buffer_space_optimized>(кроме итераторов, равных<end()>.

    Сложность. Линейный (по размеру<circular_buffer_space_optimized>.

    ] См. также:

    <insert(iterator, size_type, value_type)>,<insert(iterator, InputIterator, InputIterator)>,<rinsert(iterator, value_type)>,<rinsert(iterator, size_type, value_type)>,<rinsert(iterator, InputIterator, InputIterator)>

    Параметры:

    <item>

    Элемент должен быть вставлен.

    <pos>

    Итератор, определяющий положение, в которое будет вставлен<item>.

    <pos>является действительным итератором, указывающим на<circular_buffer_space_optimized>или его конец.

    Последующие условия:

    <item>будет вставлен в положение<pos>.
    Если<circular_buffer_space_optimized>заполнен, первый элемент будет перезаписан. Если<circular_buffer_space_optimized>заполнен и<pos>указывает на<begin()>, то<item>не будет вставлен. Если вместимость<0>, ничего не будет вставлено.

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

    Возвращение:

    Итератор к вставленному элементу или<begin()>, если<item>не вставлен. (См.Эффект.)

    Броски:

    Ошибка распределения, если память исчерпана (<std::bad_alloc>, если используется стандартный распределитель). Что бы там ни было<T::T(const T&)>. Что бы ни бросил<T::operator = (const T&)>.
  • <
    iteratorinsert(iteratorpos,rvalue_typeitem);
    >Включить элемент в указанном положении.

    Безопасность в отношении исключений.

    Инвалидация итераторов.

    Инвалидирует все итераторы, указывающие на<circular_buffer_space_optimized>[за исключением итераторов, равных<end()>

    Сложность.

    [Linear]

    <insert(iterator, size_type, value_type)><insert(iterator, InputIterator, InputIterator)><insert(iterator, InputIterator, InputIterator)><insert(iterator, InputIterator, InputIterator)><rinsert(iterator, value_type)><rinsert(iterator, value_type)><rinsert(iterator, size_type, value_type)>

    [36 Элемент должен быть вставлен.

    <pos>

    Итератор, определяющий положение, в котором будет вставлен<item>.

    Требует:

    <pos>является действительным итератором, указывающим на<circular_buffer_space_optimized>или его конец.

    Постусловия:

    <item>будет вставлен в положение<pos>
    . Если<circular_buffer_space_optimized>заполнен, первый элемент будет перезаписан. Если<circular_buffer_space_optimized>заполнен и<pos>указывает на<begin()>, то<item>не будет вставлен. Если вместимость<0>, ничего не будет вставлено.

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

    Возвращается:

    Итератор к вставленному элементу или<begin()>, если<item>не вставлен. (См.Эффект.)

    Броски:

    Ошибка распределения, если память исчерпана (<std::bad_alloc>, если используется стандартный распределитель). Что бросит<T::T(const T&)>или ничего, если<T::T(T&&)>не является исключением.
  • <
    iteratorinsert(iteratorpos);
    >Включить элемент в указанном положении.

    Безопасность в отношении исключений. Базовый.

    Итератор Инвалидация. Инвалидирует все итераторы, указывающие на<circular_buffer_space_optimized>(кроме итераторов, равных<end()>.

    Сложность. Линейный (размер<circular_buffer_space_optimized>.

    См. также:

    <insert(iterator, size_type, value_type)>,<insert(iterator, InputIterator, InputIterator)>,<rinsert(iterator, value_type)>,<rinsert(iterator, size_type, value_type)>,<rinsert(iterator, InputIterator, InputIterator)>

    Параметры:

    <pos>

    Итератор, определяющий положение, в котором будет вставлен<item>.

    <pos>является действительным итератором, указывающим на<circular_buffer_space_optimized>или его конец.

    Последующие условия:

    <item>будет вставлен в положение<pos>
    . Если<circular_buffer_space_optimized>заполнен, первый элемент будет перезаписан. Если<circular_buffer_space_optimized>заполнен и<pos>указывает на<begin()>, то<item>не будет вставлено. Если вместимость<0>, ничего не будет вставлено.

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

    Возвращение:

    Итератор к вставленному элементу или<begin()>, если<item>не вставлен. (См.Эффект.)

    Броски:

    Ошибка распределения, если память исчерпана (<std::bad_alloc>, если используется стандартный распределитель). Что бы там ни было<T::T()>. Что бросит<T::T(const T&)>или ничего, если<T::T(T&&)>не исключение.
  • <
    voidinsert(iteratorpos,size_typen,param_value_typeitem);
    >Включить<n>экземпляры<item>в указанном положении.

    Безопасность в отношении исключений. Базовый.

    Итератор Инвалидация. Инвалидирует все итераторы, указывающие на<circular_buffer_space_optimized>(за исключением итераторов, равных<end()>.

    Линейный (в<min[capacity().capacity(), size() + n]>.]

    Рассмотрим<circular_buffer_space_optimized>с мощностью 6 и размером 4. Его внутренний буфер может выглядеть так, как ниже.

    <|1|2|3|4| | |>
    <p ___^>


    После вставки 5 элементов в положение<p>:

    <insert(p, (size_t)5, 0);>

    фактически вставляются только 4 элемента и элементы<1>и<2>перезаписываются. Это связано с тем, что операция вставки сохраняет емкость. После введения внутренний буфер выглядит следующим образом:

    <|0|0|0|0|3|4|>

    Для сравнения, если емкость не будет сохранена, внутренний буфер тогда приведет к<|1|2|0|0|0|0|0|3|4|>.

    См. также:

    <insert(iterator, value_type)>,<insert(iterator, InputIterator, InputIterator)>,<rinsert(iterator, value_type)>,<rinsert(iterator, size_type, value_type)>,<rinsert(iterator, InputIterator, InputIterator)>

    Параметры:

    <item>

    Элемент, копии которого будут вставлены.

    <n>

    Число<item>должно быть вставлено.

    <pos>

    Итератор, определяющий положение, в котором будут вставлены<item>с.

    <pos>является действительным итератором, указывающим на<circular_buffer_space_optimized>или его конец.

    Постусловия:

    Число<min[n, (pos - begin()) + reserve()]>элементов будет вставлено в положение<pos>
    . Число<min[pos - begin(), max[0, n - reserve()]]>элементов будет перезаписано в начале<circular_buffer_space_optimized>
    (см.Примердля объяснения.)

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

    Броски:

    Ошибка распределения, если память исчерпана (<std::bad_alloc>, если используется стандартный распределитель). Что бы ни бросил<T::T(const T&)>. Все, что<T::operator = (const T&)>бросает.
  • <
    template<typenameInputIterator>
     voidinsert(iteratorpos,InputIteratorfirst,InputIteratorlast);
    >Включить диапазон<[first, last)>в указанном положении.

    Безопасность исключения. & #160;Базовый.

    Итератор Инвалидация. & #160;Инвалидирует все итераторы, указывающие на<circular_buffer_space_optimized>(кроме итераторов, равных<end()>.

    Сложность. & #160;Линейный<[size() + std::distance(first, last)]>; в<min[capacity().capacity(), size() + std::distance(first, last)]>, если<InputIterator>являетсяИтератор случайного доступа.

    Рассмотрим<circular_buffer_space_optimized>с мощностью 6 и размером 4. Его внутренний буфер может выглядеть так, как ниже.

    <|1|2|3|4| | |>
    <p ___^>


    После вставки ряда элементов в положение<p>:

    <int array[] = { 5, 6, 7, 8, 9 };>
    <insert(p, array, array + 5);>



    фактически вставляются только элементы<6>,<7>,<8>и<9>из указанного диапазона и элементы<1>и<2>перезаписываются. Это связано с тем, что операция вставки сохраняет емкость. После введения внутренний буфер выглядит следующим образом:

    <|6|7|8|9|3|4|>

    Для сравнения, если емкость не будет сохранена, внутренний буфер тогда приведет к<|1|2|5|6|7|8|9|3|4|>.

    См. также:

    <insert(iterator, value_type)>,<insert(iterator, size_type, value_type)>,<rinsert(iterator, value_type)>,<rinsert(iterator, size_type, value_type)>,<rinsert(iterator, InputIterator, InputIterator)>

    Параметры:

    <first>

    Начало диапазона, который будет вставлен.

    <last>

    Конец диапазона должен быть вставлен.

    <pos>

    Итератор, определяющий положение, в котором будет вставлен диапазон.

    <pos>является действительным итератором, указывающим на<circular_buffer_space_optimized>или его конец.
    Дальность действия<[first, last)>, где<first>и<last>соответствуют требованиямИтератор ввода.

    Последующие условия:

    Элементы из диапазона<[first + max[0, distance(first, last) - (pos - begin()) - reserve()], last)>будут вставлены в положение<pos>
    . Число<min[pos - begin(), max[0, distance(first, last) - reserve()]]>элементов будет перезаписано в начале<circular_buffer_space_optimized>
    (см.Примердля объяснения).

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

    Броски:

    Ошибка распределения, если память исчерпана (<std::bad_alloc>, если используется стандартный распределитель). Что бросит<T::T(const T&)>или ничего, если<T::T(T&&)>не исключение.
  • <
    iteratorrinsert(iteratorpos,param_value_typeitem);
    >Вставить элемент перед указанным положением.

    Безопасность в отношении исключений. Базовая.

    Инвалидация итераторов. Инвалидирует все итераторы, указывающие на<circular_buffer_space_optimized>(кроме итераторов, равных<end()>.

    Сложность. Линейный (размер<circular_buffer_space_optimized>.

    См. также:

    <rinsert(iterator, size_type, value_type)>,<rinsert(iterator, InputIterator, InputIterator)>,<insert(iterator, value_type)>,<insert(iterator, size_type, value_type)>,<insert(iterator, InputIterator, InputIterator)>

    Параметры:

    <item>

    Элемент должен быть вставлен.

    <pos>

    Итератор, определяющий положение, перед которым будет вставлен<item>.

    <pos>является действительным итератором, указывающим на<circular_buffer_space_optimized>или его конец.

    Последующие условия:

    <item>будет вставлен перед положением<pos>
    . Если<circular_buffer_space_optimized>заполнен, последний элемент будет перезаписан. Если<circular_buffer_space_optimized>заполнен и<pos>указывает на<end()>, то<item>не будет вставлен. Если вместимость<0>, ничего не будет вставлено.

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

    Возвращение:

    Итератор к вставленному элементу или<end()>, если<item>не вставлен. (См.Эффект.)

    Броски:

    Ошибка распределения, если память исчерпана (<std::bad_alloc>, если используется стандартный распределитель). Что бы там ни было<T::T(const T&)>. Что бы ни бросил<T::operator = (const T&)>.
  • <
    iteratorrinsert(iteratorpos,rvalue_typeitem);
    >Вставить элемент перед указанным положением.

    Безопасность в отношении исключений. Базовая.

    Инвалидация итератора. Инвалидирует все итераторы, указывающие на<circular_buffer_space_optimized>(кроме итераторов, равных<end()>.

    Сложность. Линейный [в размере<circular_buffer_space_optimized>.

    См. также:

    <rinsert(iterator, size_type, value_type)>,<rinsert(iterator, InputIterator, InputIterator)>,<insert(iterator, value_type)>,<insert(iterator, size_type, value_type)>,<insert(iterator, InputIterator, InputIterator)>

    Параметры:

    <item>

    Элемент должен быть вставлен.

    <pos>

    Итератор, определяющий положение, перед которым будет вставлен<item>.

    <pos>является действительным итератором, указывающим на<circular_buffer_space_optimized>или его конец.

    Постусловия:

    <item>будет вставлен перед положением<pos>
    Если<circular_buffer_space_optimized>заполнен, последний элемент будет перезаписан. Если<circular_buffer_space_optimized>заполнен и<pos>указывает на<end()>, то<item>не будет вставлен. Если вместимость<0>, ничего не будет вставлено.

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

    Возвращение:

    Итератор к вставленному элементу или<end()>, если<item>не вставлен. (См.Эффект.)

    Броски:

    Ошибка распределения, если память исчерпана (4512), если используется стандартный распределитель. Что бросит<T::T(const T&)>или ничего, если<T::T(T&&)>не исключение.
  • <
    iteratorrinsert(iteratorpos);
    >Вставить элемент перед указанным положением.

    Безопасность в отношении исключений. Базовый.

    Итератор Инвалидация. Инвалидирует все итераторы, указывающие на<circular_buffer_space_optimized>(кроме итераторов, равных<end()>.

    Сложность. Линейный [в размере<circular_buffer_space_optimized>.

    См. также:

    <rinsert(iterator, size_type, value_type)>,<rinsert(iterator, InputIterator, InputIterator)>,<insert(iterator, value_type)>,<insert(iterator, size_type, value_type)>,<insert(iterator, InputIterator, InputIterator)>

    Параметры:

    <pos>

    Итератор, определяющий положение, перед которым будет вставлен<item>.

    <pos>является действительным итератором, указывающим на<circular_buffer_space_optimized>или его конец.

    Последующие условия:

    <item>будет вставлен перед положением<pos>
    . Если<circular_buffer_space_optimized>заполнен, последний элемент будет перезаписан. Если<circular_buffer_space_optimized>заполнен и<pos>указывает на<end()>, то<item>не будет вставлен. Если вместимость<0>, ничего не будет вставлено.

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

    Возвращение:

    Итератор к вставленному элементу или<end()>, если<item>не вставлен. (См.Эффект.)

    Броски:

    Ошибка распределения, если память исчерпана (<std::bad_alloc>, если используется стандартный распределитель). Что бы там ни было<T::T()>. Все, что<T::T(const T&)>бросает или ничего, если<T::T(T&&)>не является исключением.
  • <
    voidrinsert(iteratorpos,size_typen,param_value_typeitem);
    >Вставить<n>экземпляры<item>перед указанной позицией.

    Безопасность исключения. Базовый.

    Итератор Инвалидация. Инвалидирует все итераторы, указывающие на<circular_buffer_space_optimized>(кроме итераторов, равных<end()>.

    Сложность. Линейный (в<min[capacity().capacity(), size() + n]>.]

    Пример. Рассмотрим<circular_buffer_space_optimized>с мощностью 6 и размером 4. Его внутренний буфер может выглядеть так, как ниже.

    <|1|2|3|4| | |>
    <p ___^>


    После вставки 5 элементов перед положением<p>:

    <rinsert(p, (size_t)5, 0);>

    фактически вставляются только 4 элемента и элементы<3>и<4>перезаписываются. Это связано с тем, что операция полоскания сохраняет емкость. После введения внутренний буфер выглядит следующим образом:

    <|1|2|0|0|0|0|>

    Для сравнения, если емкость не будет сохранена, внутренний буфер тогда приведет к<|1|2|0|0|0|0|0|3|4|>.

    См. также:

    <rinsert(iterator, value_type)>,<rinsert(iterator, InputIterator, InputIterator)>,<insert(iterator, value_type)>,<insert(iterator, size_type, value_type)>,<insert(iterator, InputIterator, InputIterator)>

    Параметры:

    <item>

    Элемент, копии которого будут вставлены.

    <n>

    Число<item>должно быть вставлено.

    <pos>

    Итератор, определяющий положение, в котором будут вставлены<item>с.

    <pos>является действительным итератором, указывающим на<circular_buffer_space_optimized>или его конец.

    Последующие условия:

    Число<min[n, (end() - pos) + reserve()]>элементов будет вставлено перед положением<pos>
    . Число<min[end() - pos, max[0, n - reserve()]]>элементов будет перезаписано в конце<circular_buffer_space_optimized>
    (см.Примердля объяснения.)

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

    Броски:

    Ошибка распределения, если память исчерпана<std::bad_alloc>, если используется стандартный распределитель. Все, что<T::T(const T&)>бросает.<T::operator = (const T&)>бросок.
  • <
    template<typenameInputIterator>
     voidrinsert(iteratorpos,InputIteratorfirst,InputIteratorlast);
    >Включить диапазон<[first, last)>перед указанным положением.

    Безопасность в отношении исключений. Базовый.

    Итератор Инвалидация. Инвалидирует все итераторы, указывающие на<circular_buffer_space_optimized>(кроме итераторов, равных<end()>.

    Сложность. Линейный [в<[size() + std::distance(first, last)]>; в<min[capacity().capacity(), size() + std::distance(first, last)]>, если<InputIterator>являетсяИтератор случайного доступа.

    Пример. Рассмотрим<circular_buffer_space_optimized>с мощностью 6 и размером 4. Его внутренний буфер может выглядеть так, как ниже.

    <|1|2|3|4| | |>
    <p ___^>

    После вставки ряда элементов перед положением<p>:

    <int array[] = { 5, 6, 7, 8, 9 };>
    <insert(p, array, array + 5);>

    фактически вставляются только элементы<5>,<6>,<7>и<8>из указанного диапазона и элементы<3>и<4>перезаписываются. Это связано с тем, что операция полоскания сохраняет емкость. После вставки внутренний буфер выглядит следующим образом:




    Для сравнения, если емкость не будет сохранена, внутренний буфер тогда приведет к<|1|2|5|6|7|8|9|3|4|>.

    См. также:

    <rinsert(iterator, value_type)>,<rinsert(iterator, size_type, value_type)>,<insert(iterator, value_type)>,<insert(iterator, size_type, value_type)>,<insert(iterator, InputIterator, InputIterator)>

    <|1|2|3|4| | |>
    <
    template<typenameInputIterator>
     voidrinsert(iteratorpos,InputIteratorfirst,InputIteratorlast);
    >
    <end()><end()><end()><end()><end()>Начало диапазона, который будет вставлен.

    <last>

    Конец диапазона должен быть вставлен.

    <pos>

    Итератор, определяющий положение, в котором будет вставлен диапазон.

    <pos>является действительным итератором, указывающим на<circular_buffer_space_optimized>или его конец.
    Действительный диапазон<[first, last)>, где<first>и<last>соответствуют требованиямИтератор ввода.

    Последующие условия:

    Элементы из диапазона<[first, last - max[0, distance(first, last) - (end() - pos) - reserve()])>будут вставлены перед положением<pos>.
    Число элементов<min[end() - pos, max[0, distance(first, last) - reserve()]]>будет перезаписано в конце<circular_buffer>
    (см.Примердля объяснения).

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

    Броски:

    Ошибка распределения, если память исчерпана (<std::bad_alloc>, если используется стандартный распределитель). Все, что<T::T(const T&)>бросает. Все, что<T::operator = (const T&)>бросает.
  • <
    iteratorerase(iteratorpos);
    >Удалите элемент в указанном положении.

    Безопасность в отношении исключений. Базовый.

    Итератор Инвалидация. Недействительные итераторы, указывающие на<circular_buffer_space_optimized>(кроме итераторов, равных<end()>.

    Сложность. Линейный (в размере<circular_buffer_space_optimized>.

    См. также:

    <erase(iterator, iterator)>,<rerase(iterator)>,<rerase(iterator, iterator)>,<clear()>

    Параметры:

    <pos>

    Итератор, указывающий на удаляемый элемент.

    <pos>является действительным итератором, указывающим на<circular_buffer_space_optimized>(но не на<end()>).

    Пост-условия:

    Элемент в положении<pos>удаляется.

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

    Возвращение:

    Итератор к первому элементу, остающемуся за пределами удаленного элемента или<end()>, если такого элемента не существует.

    Броски:

    Ошибка распределения, если память исчерпана (<std::bad_alloc>, если используется стандартный распределитель). Что бросит<T::operator = (const T&)>или ничего, если<T::operator = (T&&)>не является исключением.
  • <
    iteratorerase(iteratorfirst,iteratorlast);
    >Удалите диапазон<[first, last)>.

    Безопасность исключения. Базовый.

    Итератор Инвалидация. Инвалидирует все итераторы, указывающие на<circular_buffer_space_optimized>(кроме итераторов, равных<end()>.

    Сложность. Линейный (в размере<circular_buffer_space_optimized>.

    См. также:

    <erase(iterator)>,<rerase(iterator)>,<rerase(iterator, iterator)>,<clear()>

    Параметры:

    <first>

    Начало диапазона должно быть удалено.

    <last>

    Конец диапазона должен быть удален.

    Требуется:

    Срок действия<[first, last)>.

    Пост-условия:

    Элементы из диапазона<[first, last)>удаляются. (5359) Ничего не удаляется.

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

    Возвращение:

    Итератор к первому элементу, остающемуся за пределами удаленных элементов или<end()>, если такого элемента не существует.

    Броски:

    Ошибка распределения, если память исчерпана (<std::bad_alloc>, если используется стандартный распределитель). Что бросит<T::operator = (const T&)>или ничего, если<T::operator = (T&&)>не исключение.
  • <
    iteratorrerase(iteratorpos);
    >Снять элемент в указанном положении.

    Безопасность в отношении исключений. Базовый.

    Итератор Инвалидация. Инвалидирует все итераторы, указывающие на<circular_buffer_space_optimized>(кроме итераторов, равных<end()>.

    Сложность. Линейный (в размере<circular_buffer_space_optimized>.

    См. также:

    <erase(iterator)>,<erase(iterator, iterator)>,<rerase(iterator, iterator)>,<clear()>

    [Note]Примечание

    В принципе, нет никакой разницы между<erase(iterator)>и этим методом. Он реализуется только для согласования с базой<circular_buffer>.

    <pos>

    Итератор, указывающий на элемент, который должен быть удален.

    Требует:

    <pos>является действительным итератором, указывающим на<circular_buffer_space_optimized>[но не на<end()>

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

    Пост-условия:

    Элемент в положении<pos>удаляется.

    Возвращение:

    Итератор к первому элементу, остающемуся перед удаленным элементом или<begin()>, если такого элемента не существует.

    Броски:

    Ошибка распределения, если память исчерпана (<std::bad_alloc>, если используется стандартный распределитель). Что бы это ни было (5515) или ничего, если (5516) не является исключением.
  • <
    iteratorrerase(iteratorfirst,iteratorlast);
    >Удалите диапазон<[first, last)>.

    Безопасность исключения. Базовый.

    Итератор Инвалидация. Инвалидирует все итераторы, указывающие на<circular_buffer_space_optimized>(кроме итераторов, равных<end()>.

    Сложность. Линейный (в размере<circular_buffer_space_optimized>.

    [Note]Примечание

    В основном нет разницы между<erase(iterator, iterator)>и этим методом. Он реализуется только для согласования с базой<<circular_buffer>.

    См. также:

    <erase(iterator)>,<erase(iterator, iterator)>,<rerase(iterator)>,<clear()>

    <first>

    [ Начало диапазона должно быть удалено.

    <last>

    Конец диапазона должен быть удален.

    Требуется:

    Дальность действия<[first, last)>.

    Последующие условия:

    Элементы из диапазона<[first, last)>удаляются. (5674) Ничего не удаляется.

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

    Возвращение:

    Итератор к первому элементу, остающемуся перед удаленными элементами, или<begin()>, если такого элемента не существует.

    Броски:

    Ошибка распределения, если память исчерпана (<std::bad_alloc>, если используется стандартный распределитель). Что бы ни бросало<T::operator = (const T&)>или ничего, если<T::operator = (T&&)>не является исключением.
  • <
    voidclear();
    >Удалите все сохраненные элементы из пространственного оптимизированного кругового буфера.

    Безопасность в отношении исключений. Базовый.

    Итератор Инвалидация. Инвалидирует все итераторы, указывающие на<circular_buffer_space_optimized>(кроме итераторов, равных<end()>.

    Сложность. Линейный (в размере<circular_buffer_space_optimized>.

    См. также:

    <~circular_buffer_space_optimized()>,<erase(iterator)>,<erase(iterator, iterator)>,<rerase(iterator)>,<rerase(iterator, iterator)>

    Последующие условия:

    <size() == 0>

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

    Броски:

    Ошибка распределения, если память исчерпана (5843) при использовании стандартного распределителя.
  • circular_buffer_space_optimized private member functions

    1. <
      voidadjust_min_capacity();
      >Регулировать объем выделенной памяти.
    2. <
      size_typeensure_reserve(size_typenew_capacity,size_typebuffer_size)const;
      >Обеспечить резерв для возможного роста.
    3. <
      voidcheck_low_capacity(size_typen=1);
      >Проверка на низкую пропускную способность.
    4. <
      voidcheck_high_capacity();
      >Проверка высокой вместимости.
    5. <
      voidreduce_capacity(consttrue_type&);
      >Специализированный метод снижения мощности.
    6. <
      voidreduce_capacity(constfalse_type&);
      >Специализированный метод снижения мощности.
    7. <
      template<typenameIntegralType>
       voidinsert(constiterator&pos,IntegralTypen,IntegralTypeitem,
                   consttrue_type&);
      >Специализированный метод вставки.
    8. <
      template<typenameIterator>
       voidinsert(constiterator&pos,Iteratorfirst,Iteratorlast,
                   constfalse_type&);
      >Специализированный метод вставки.
    9. <
      template<typenameIntegralType>
       voidrinsert(constiterator&pos,IntegralTypen,IntegralTypeitem,
                    consttrue_type&);
      >Специализированный метод полоскания.
    10. <
      template<typenameIterator>
       voidrinsert(constiterator&pos,Iteratorfirst,Iteratorlast,
                    constfalse_type&);
      >Специализированный метод полоскания.

    circular_buffer_space_optimized private static functions

    1. <
      staticsize_type
      init_capacity(constcapacity_type&capacity_ctrl,size_typen);
      >Определить начальную емкость.
    2. <
      template<typenameIntegralType>
       staticsize_type
       init_capacity(constcapacity_type&capacity_ctrl,IntegralTypen,
                     IntegralType,consttrue_type&);
      >Специализированный метод определения начальной емкости.
    3. <
      template<typenameIterator>
       staticsize_type
       init_capacity(constcapacity_type&capacity_ctrl,Iteratorfirst,
                     Iteratorlast,constfalse_type&);
      >Специализированный метод определения начальной емкости.
    4. <
      template<typenameInputIterator>
       staticsize_type
       init_capacity(constcapacity_type&capacity_ctrl,InputIterator,
                     InputIterator,conststd::input_iterator_tag&);
      >Специализированный метод определения начальной емкости.
    5. <
      template<typenameForwardIterator>
       staticsize_type
       init_capacity(constcapacity_type&capacity_ctrl,ForwardIteratorfirst,
                     ForwardIteratorlast,conststd::forward_iterator_tag&);
      >Специализированный метод определения начальной емкости.

    PrevUpHomeNext

    Статья Class template circular_buffer_space_optimized раздела The Boost C++ Libraries BoostBook Documentation Subset Boost.Circular_buffer C++ Reference может быть полезна для разработчиков на c++ и boost.




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



    :: Главная :: Boost.Circular_buffer C++ Reference ::


    реклама


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

    Время компиляции файла: 2024-08-30 11:47:00
    2025-05-20 07:12:55/0.026924848556519/1