45 typedef std::vector<T, Allocator> store_type;
47 size_t m_front_offset = 0;
49 typedef typename store_type::value_type value_type;
50 typedef typename store_type::size_type size_type;
51 typedef typename store_type::difference_type difference_type;
52 typedef typename store_type::reference reference;
53 typedef typename store_type::const_reference const_reference;
54 typedef typename store_type::pointer pointer;
55 typedef typename store_type::const_pointer const_pointer;
56 typedef typename store_type::iterator iterator;
57 typedef typename store_type::reverse_iterator reverse_iterator;
58 typedef typename store_type::const_iterator const_iterator;
59 typedef typename store_type::const_reverse_iterator const_reverse_iterator;
70 template<
typename InputIt>
74 iterator begin()
noexcept
76 return m_vec.begin() + m_front_offset;
79 iterator end()
noexcept
84 const_iterator begin()
const noexcept
86 return m_vec.begin() + m_front_offset;
89 const_iterator end()
const noexcept
94 reverse_iterator rbegin()
noexcept
96 return m_vec.rbegin();
99 const_reverse_iterator rbegin()
const noexcept
101 return m_vec.rbegin();
104 reverse_iterator rend()
noexcept
106 return m_vec.rend() - m_front_offset;
109 const_reverse_iterator rend()
const noexcept
111 return m_vec.rend() - m_front_offset;
114 reference operator[](size_type pos)
116 return m_vec[pos + m_front_offset];
119 const_reference operator[](size_type pos)
const
121 return m_vec[pos + m_front_offset];
124 reference at(size_type pos)
126 return m_vec.at(pos + m_front_offset);
129 const_reference at(size_type pos)
const
131 return m_vec.at(pos + m_front_offset);
134 void push_back(
const T& value)
136 m_vec.push_back(value);
139 void push_back(T&& value)
141 m_vec.push_back(std::move(value));
144 template<
typename... Args>
145 void emplace_back(Args&&... args)
147 m_vec.emplace_back(std::forward<Args>(args)...);
150 iterator insert(iterator pos,
const T& value)
152 return m_vec.insert(pos, value);
155 iterator insert(const_iterator pos, T&& value)
157 return m_vec.insert(pos, std::move(value));
160 template<
typename InputIt>
161 void insert(iterator pos, InputIt first, InputIt last)
163 m_vec.insert(pos, first, last);
166 void resize(size_type count)
172 iterator erase(iterator pos)
174 if (pos == m_vec.begin() + m_front_offset)
177 return m_vec.begin() + m_front_offset;
180 return m_vec.erase(pos);
183 iterator erase(iterator first, iterator last)
185 return m_vec.erase(first, last);
188 size_type capacity()
const noexcept
190 return m_vec.capacity();
196 m_vec.shrink_to_fit();
199 void reserve(size_type new_cap)
202 m_vec.reserve(new_cap);
205 size_type size()
const
207 return m_vec.size() - m_front_offset;
210 template<
typename InputIt>
211 void assign(InputIt first, InputIt last)
214 m_vec.assign(first, last);
219 return m_vec.data() + m_front_offset;
222 const T* data()
const
224 return m_vec.data() + m_front_offset;
230 m_vec.erase(m_vec.begin(), m_vec.begin() + m_front_offset);