171 using ctnr_t = std::vector<T*, U>;
172 using ctnr_t::ctnr_t;
173 using ctnr_t::reserve;
174 using ctnr_t::resize;
175 using value_type = T;
177 auto begin()
noexcept {
return make_indirect_ptr_iterator(ctnr_t::begin()); }
178 auto end()
noexcept {
return make_indirect_ptr_iterator(ctnr_t::end()); }
179 auto begin()
const noexcept {
return make_indirect_ptr_iterator(ctnr_t::begin()); }
180 auto end()
const noexcept {
return make_indirect_ptr_iterator(ctnr_t::end()); }
182 auto rbegin()
noexcept {
return make_indirect_ptr_iterator(ctnr_t::rbegin()); }
183 auto rend()
noexcept {
return make_indirect_ptr_iterator(ctnr_t::rend()); }
184 auto rbegin()
const noexcept {
return make_indirect_ptr_iterator(ctnr_t::rbegin()); }
185 auto rend()
const noexcept {
return make_indirect_ptr_iterator(ctnr_t::rend()); }
187 auto cbegin()
const noexcept {
return make_indirect_ptr_iterator(ctnr_t::cbegin()); }
188 auto cend()
const noexcept {
return make_indirect_ptr_iterator(ctnr_t::cend()); }
190 auto size()
const noexcept {
return ctnr_t::size(); }
191 auto empty()
const noexcept {
return ctnr_t::empty(); }
193 auto push_back(T* ptr) {
return ctnr_t::push_back(ptr); }
195 auto& front()
const noexcept {
return *ctnr_t::front(); }
196 auto& back()
const noexcept {
return *ctnr_t::back(); }
198 auto& operator[](
int pos)
noexcept {
return *ctnr_t::operator[](pos); }
199 auto& operator[](
int pos)
const noexcept {
return *ctnr_t::operator[](pos); }
206 Container& container;
208 auto begin() {
return make_indirect_iterator(container.begin()); }
209 auto end() {
return make_indirect_iterator(container.end()); }
210 auto begin()
const {
return make_indirect_iterator(container.begin()); }
211 auto end()
const {
return make_indirect_iterator(container.end()); }
212 auto cbegin()
const {
return make_indirect_iterator(container.cbegin()); }
213 auto cend()
const {
return make_indirect_iterator(container.cend()); }
225 std::array<T*, N> array;
228 using value_type = T;
229 template <
typename... Args>
231 : array{{std::forward<Args>(args)...}}
235 auto begin()
noexcept {
return make_indirect_ptr_iterator(array.begin()); }
236 auto end()
noexcept {
return make_indirect_ptr_iterator(array.end()); }
237 auto begin()
const noexcept {
return make_indirect_ptr_iterator(array.begin()); }
238 auto end()
const noexcept {
return make_indirect_ptr_iterator(array.end()); }
239 auto cbegin()
const noexcept {
return make_indirect_ptr_iterator(array.cbegin()); }
240 auto cend()
const noexcept {
return make_indirect_ptr_iterator(array.cend()); }
242 auto& operator[](
int pos)
noexcept {
return *array[pos]; }
243 auto& operator[](
int pos)
const noexcept {
return *array[pos]; }
250 auto begin()
noexcept {
return make_indirect_iterator(map.begin()); }
251 auto begin()
const noexcept {
return make_indirect_iterator(map.begin()); }
253 auto cbegin()
noexcept {
return make_indirect_iterator(map.cbegin()); }
254 auto cbegin()
const noexcept {
return make_indirect_iterator(map.cbegin()); }
256 auto end()
noexcept {
return make_indirect_iterator(map.end()); }
257 auto end()
const noexcept {
return make_indirect_iterator(map.end()); }
259 auto cend()
noexcept {
return make_indirect_iterator(map.cend()); }
260 auto cend()
const noexcept {
return make_indirect_iterator(map.cend()); }
262 auto empty()
const noexcept {
return map.empty(); }
264 template <
typename K>
265 auto find(K&& key)
const noexcept
267 return map.find(std::forward<K>(key));
270 template <
typename E>
273 return map.insert(std::forward<E>(elt));
283 using base_iterator_t =
typename Map_T::iterator;
284 using base_const_iterator_t =
typename Map_T::const_iterator;
287 using value_type =
typename base_iterator_t::value_type;
290 auto begin()
noexcept {
return make_indirect_map_iterator(map.begin()); }
291 auto begin()
const noexcept {
return make_indirect_map_iterator(map.begin()); }
293 auto cbegin()
noexcept {
return make_indirect_map_iterator(map.cbegin()); }
294 auto cbegin()
const noexcept {
return make_indirect_map_iterator(map.cbegin()); }
296 auto end()
noexcept {
return make_indirect_map_iterator(map.end()); }
297 auto end()
const noexcept {
return make_indirect_map_iterator(map.end()); }
299 auto cend()
noexcept {
return make_indirect_map_iterator(map.cend()); }
300 auto cend()
const noexcept {
return make_indirect_map_iterator(map.cend()); }
302 auto empty()
const noexcept {
return map.empty(); }
304 template <
typename K>
305 auto find(K&& key)
const noexcept
307 return make_indirect_map_iterator(map.find(std::forward<K>(key)));
310 template <
typename E>
313 return map.insert(std::forward<E>(elt));