Algorithms Library Toolkit
A toolkit for algorithms, especially for algorithms on formal languages
ptr_vector.hpp
Go to the documentation of this file.
1
6/*
7 * This file is part of Algorithms library toolkit.
8 * Copyright (C) 2017 Jan Travnicek (jan.travnicek@fit.cvut.cz)
9
10 * Algorithms library toolkit is free software: you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation, either version 3 of the License, or
13 * (at your option) any later version.
14
15 * Algorithms library toolkit is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
19
20 * You should have received a copy of the GNU General Public License
21 * along with Algorithms library toolkit. If not, see <http://www.gnu.org/licenses/>.
22 */
23
24#pragma once
25
26#include <compare>
27
28#include <ext/ostream>
29
30#include <extensions/range.hpp>
31#include <extensions/clone.hpp>
33
34namespace ext {
35
43template < class T >
50
51public:
56 using value_type = T;
57
62 using size_type = std::size_t;
63
68 using diference_type = std::ptrdiff_t;
69
75
80 using const_reference = const value_type &;
81
86 using pointer = T *;
87
92 using const_pointer = const T *;
93
99
105
111
117
122 ptr_vector ( ) noexcept = default;
123
132 template < class R >
133 ptr_vector ( std::initializer_list < R > init ) {
134 insert ( cbegin ( ), std::move ( init ) );
135 }
136
145 template < class R = T >
146 explicit ptr_vector ( size_type count ) {
147 resize < R > ( count );
148 }
149
159 template < class InputIt >
160 ptr_vector ( InputIt first, InputIt last ) {
161 insert ( cbegin ( ), first, last );
162 }
163
171 template < class Iterator >
173 }
174
184 template < class R >
185 ptr_vector ( size_type count, const R & value ) {
186 insert ( cbegin ( ), count, value );
187 }
188
195 ptr_vector ( const ptr_vector& other ) {
196 insert ( cbegin ( ), other.begin ( ), other.end ( ) );
197 }
198
205 ptr_vector ( ptr_vector && other ) noexcept {
206 std::swap ( m_data, other.m_data );
207 }
208
213 ~ptr_vector ( ) noexcept {
214 clear ( );
215 }
216
224 if ( this == & other )
225 return * this;
226
227 assign ( other.begin ( ), other.end ( ) );
228
229 return *this;
230 }
231
239 std::swap ( m_data, other.m_data );
240
241 return *this;
242 }
243
253 template < class R >
254 void assign ( size_type count, const R & value ) {
255 clear ( );
256 insert ( cbegin ( ), count, value );
257 }
258
268 template< class InputIt >
269 void assign ( InputIt first, InputIt last ) {
270 clear ( );
271 insert ( cbegin ( ), first, last );
272 }
273
282 template < class R >
283 void assign ( std::initializer_list < R > ilist ) {
284 clear ( );
285 insert ( cbegin ( ), std::move ( ilist ) );
286 }
287
297 return * m_data.at ( index );
298 }
299
308 const_reference at ( size_type index ) const {
309 return * m_data.at ( index );
310 }
311
321 return * m_data [ index ];
322 }
323
333 return * m_data [ index ];
334 }
335
343 return * m_data.front ( );
344 }
345
353 return * m_data.front ( );
354 }
355
363 return * m_data.back ( );
364 }
365
373 return * m_data.back ( );
374 }
375
382 iterator begin ( ) & noexcept {
383 return dereferencer ( m_data.begin ( ) );
384 }
385
392 const_iterator begin ( ) const & noexcept {
393 return dereferencer ( m_data.begin ( ) );
394 }
395
402 auto begin ( ) && noexcept {
403 return make_move_iterator ( this->begin ( ) );
404 }
405
412 const_iterator cbegin ( ) const noexcept {
413 return dereferencer ( m_data.cbegin ( ) );
414 }
415
422 iterator end ( ) & noexcept {
423 return dereferencer ( m_data.end ( ) );
424 }
425
432 const_iterator end ( ) const & noexcept {
433 return dereferencer ( m_data.end ( ) );
434 }
435
442 auto end ( ) && noexcept {
443 return make_move_iterator ( this->end ( ) );
444 }
445
452 const_iterator cend ( ) const noexcept {
453 return dereferencer ( m_data.cend ( ) );
454 }
455
463 return dereferencer ( m_data.rbegin ( ) );
464 }
465
472 const_reverse_iterator rbegin ( ) const noexcept {
473 return dereferencer ( m_data.rbegin ( ) );
474 }
475
482 const_reverse_iterator crbegin ( ) const noexcept {
483 return dereferencer ( m_data.crbegin ( ) );
484 }
485
492 reverse_iterator rend ( ) noexcept {
493 return dereferencer ( m_data.rend ( ) );
494 }
495
502 const_reverse_iterator rend ( ) const noexcept {
503 return dereferencer ( m_data.rend ( ) );
504 }
505
512 const_reverse_iterator crend ( ) const noexcept {
513 return dereferencer ( m_data.crend ( ) );
514 }
515
522 auto range ( ) & {
523 auto endIter = end ( );
524 auto beginIter = begin ( );
525 return ext::iterator_range < decltype ( endIter ) > ( beginIter, endIter );
526 }
527
534 auto range ( ) const & {
535 auto endIter = end ( );
536 auto beginIter = begin ( );
537 return ext::iterator_range < decltype ( endIter ) > ( beginIter, endIter );
538 }
539
546 auto range ( ) && {
547 auto endIter = std::move ( * this ).end ( );
548 auto beginIter = std::move ( * this ).begin ( );
549 return ext::iterator_range < decltype ( endIter ) > ( beginIter, endIter );
550 }
551
558 bool empty ( ) const noexcept {
559 return m_data.empty ( );
560 }
561
568 size_type size ( ) const noexcept {
569 return m_data.size ( );
570 }
571
578 size_type max_size ( ) const noexcept {
579 return m_data.max_size ( );
580 }
581
588 void reserve ( size_type new_cap ) {
589 m_data.reserve ( new_cap );
590 }
591
598 size_type capacity ( ) const noexcept {
599 return m_data.capacity ( );
600 }
601
606 void shrink_to_fit ( ) {
607 m_data.shrink_to_fit ( );
608 }
609
614 void clear ( ) noexcept {
615 for ( T * data : m_data ) {
616 delete data;
617 }
618 m_data.clear ( );
619 }
620
632 template < class R >
633 iterator set ( iterator pos, R && value ) {
634 return set ( const_iterator ( pos ), std::forward < R > ( value ) );
635 }
636
648 template < class R >
649 iterator set ( const_iterator pos, R && value ) {
650 size_type dist = std::distance ( cbegin ( ), pos );
651
652 // If the set value and value at position pos are same instances first clone, then delete
653 delete std::exchange ( m_data.at ( dist ), ext::clone ( std::forward < R > ( value ) ) );
654
655 return dereferencer ( m_data.begin ( ) + dist );
656 }
657
669 template < class R >
671 return set ( const_reverse_iterator ( pos ), std::forward < R > ( value ) );
672 }
673
685 template < class R >
687 size_type dist = std::distance ( crbegin ( ), pos );
688
689 // If the set value and value at position pos are same instances first clone, then delete
690 delete std::exchange ( m_data.at ( m_data.size ( ) - dist - 1 ), ext::clone ( std::forward < R > ( value ) ) );
691
692 return dereferencer ( m_data.rbegin ( ) + dist );
693 }
694
707 template < class R = T, class ... Args >
708 iterator emplace_set ( iterator pos, Args && ... args ) {
709 return emplace_set ( const_iterator ( pos ), std::forward < Args > ( args ) ... );
710 }
711
724 template < class R = T, class ... Args >
725 iterator emplace_set ( const_iterator pos, Args && ... args ) {
726 return set ( pos, R ( std::forward < Args > ( args ) ... ) );
727 }
728
741 template < class R = T, class ... Args >
743 return emplace_set ( const_reverse_iterator ( pos ), std::forward < Args > ( args ) ... );
744 }
745
758 template < class R = T, class ... Args >
760 return set ( pos, R ( std::forward < Args > ( args ) ... ) );
761 }
762
774 template < class R >
775 iterator insert ( iterator pos, R && value ) {
776 return insert ( const_insert ( pos ), std::forward < R > ( value ) );
777 }
778
790 template < class R >
791 iterator insert ( const_iterator pos, R && value ) {
792 return dereferencer ( m_data.insert ( pos.base ( ), ext::clone ( std::forward < R > ( value ) ) ) );
793 }
794
806 template < class R >
808 return insert ( const_reverse_iterator ( pos ), std::forward < R > ( value ) );
809 }
810
822 template < class R >
824 return dereferencer ( m_data.insert ( pos.base ( ), ext::clone ( std::forward < R > ( value ) ) ) );
825 }
826
839 template < class R >
840 iterator insert ( iterator pos, size_type count, const R & value ) {
841 return insert ( const_iterator ( pos ), count, value );
842 }
843
856 template < class R >
857 iterator insert ( const_iterator pos, size_type count, const R & value ) {
858 iterator res = dereferencer ( m_data.insert ( pos.base ( ), count, nullptr ) );
859 for ( size_type i = 0; i < count; ++ i ) {
860 * ( res.base ( ) + i ) = ext::clone ( value );
861 }
862 return res;
863 }
864
877 template < class R >
878 reverse_iterator insert ( reverse_iterator pos, size_type count, const R & value ) {
879 return insert ( const_reverse_iterator ( pos ), count, value );
880 }
881
894 template < class R >
895 reverse_iterator insert ( const_reverse_iterator pos, size_type count, const R & value ) {
896 reverse_iterator res = dereferencer ( m_data.insert ( pos, count, nullptr ) );
897 for ( size_type i = 0; i < count; ++ i ) {
898 * ( std::next ( res.base ( ) ).base ( ) + i ) = ext::clone ( value );
899 }
900 return res;
901 }
902
914 template < class InputIt >
915 iterator insert ( iterator pos, InputIt first, InputIt last ) {
916 return insert ( const_iterator ( pos ), first, last );
917 }
918
930 template < class InputIt >
931 iterator insert ( const_iterator pos, InputIt first, InputIt last ) {
932 size_type size = std::distance ( first, last );
933 iterator res = dereferencer ( m_data.insert ( pos.base ( ), size, nullptr ) );
934
935 for ( size_type i = 0; i < size; ++ first, ++ i )
936 * ( res.base ( ) + i ) = ext::clone ( * first );
937
938 return res;
939 }
940
952 template < class InputIt >
953 reverse_iterator insert ( reverse_iterator pos, InputIt first, InputIt last ) {
954 return insert ( const_reverse_iterator ( pos ), first, last );
955 }
956
968 template < class InputIt >
969 reverse_iterator insert ( const_reverse_iterator pos, InputIt first, InputIt last ) {
970 size_type size = std::distance ( first, last );
971 reverse_iterator res = dereferencer ( m_data.insert ( pos, size, nullptr ) );
972
973 for ( size_type i = 0; i < size; ++ first, ++ i )
974 * ( std::next ( res.base ( ) ).base ( ) + i ) = ext::clone ( * first );
975
976 return res;
977 }
978
990 template < class R >
991 iterator insert ( iterator pos, std::initializer_list < R > ilist ) {
992 return insert ( const_iterator ( pos ), std::move ( ilist ) );
993 }
994
1006 template < class R >
1007 iterator insert ( const_iterator pos, std::initializer_list < R > ilist ) {
1008 return insert ( pos, ilist.begin ( ), ilist.end ( ) );
1009 }
1010
1022 template < class R >
1023 reverse_iterator insert ( reverse_iterator pos, std::initializer_list < R > ilist ) {
1024 return insert ( const_reverse_iterator ( pos ), std::move ( ilist ) );
1025 }
1026
1038 template < class R >
1039 reverse_iterator insert ( const_reverse_iterator pos, std::initializer_list < R > ilist ) {
1040 return insert ( pos, ilist.begin ( ), ilist.end ( ) );
1041 }
1042
1055 template < class R = T, class ... Args >
1056 iterator emplace ( iterator pos, Args && ... args ) {
1057 return emplace ( const_iterator ( pos ), std::forward < Args > ( args ) ... );
1058 }
1059
1072 template < class R = T, class ... Args >
1073 iterator emplace ( const_iterator pos, Args && ... args ) {
1074 return insert ( pos, R ( std::forward < Args > ( args ) ... ) );
1075 }
1076
1089 template < class R = T, class ... Args >
1090 reverse_iterator emplace ( reverse_iterator pos, Args && ... args ) {
1091 return emplace ( const_reverse_iterator ( pos ), std::forward < Args > ( args ) ... );
1092 }
1093
1106 template < class R = T, class ... Args >
1108 return insert ( pos, R ( std::forward < Args > ( args ) ... ) );
1109 }
1110
1120 return erase ( const_iterator ( pos ) );
1121 }
1122
1132 delete std::addressof ( * pos );
1133 return dereferencer ( m_data.erase ( pos.base ( ) ) );
1134 }
1135
1145 return erase ( const_reverse_iterator ( pos ) );
1146 }
1147
1157 delete std::addressof ( * pos );
1158 return dereferencer ( m_data.erase ( pos.base ( ) ) );
1159 }
1160
1171 return erase ( const_iterator ( first ), const_iterator ( last ) );
1172 }
1173
1184 for ( const_iterator first_copy = first; first_copy != last; ++ first_copy ) {
1185 delete std::addressof ( * first_copy );
1186 }
1187 return dereferencer ( m_data.erase ( first.base ( ), last.base ( ) ) );
1188 }
1189
1200 return erase ( const_reverse_iterator ( first ), const_reverse_iterator ( last ) );
1201 }
1202
1213 for ( const_reverse_iterator first_copy = first; first_copy != last; ++ first_copy ) {
1214 delete std::addressof ( * first_copy );
1215 }
1216 return dereferencer ( m_data.erase ( first.base ( ), last.base ( ) ) );
1217 }
1218
1227 template < class R >
1228 void push_back ( R && value ) {
1229 insert ( cend ( ), std::forward < R > ( value ) );
1230 }
1231
1244 template < class R = T, class ... Args >
1245 reference emplace_back ( Args && ... args ) {
1246 return * emplace < R > ( cend ( ), std::forward < Args > ( args ) ... );
1247 }
1248
1253 void pop_back ( ) {
1254 delete m_data.back ( );
1255 m_data.pop_back ( );
1256 }
1257
1266 template < class R = T >
1267 void resize ( size_type count ) {
1268 for ( size_type i = count; i < m_data.size ( ); ++ i ) {
1269 delete m_data [ i ];
1270 }
1271 size_type i = m_data.size ( );
1272 m_data.resize ( count );
1273 for ( ; i < count; ++ i ) {
1274 m_data [ i ] = new R ( );
1275 }
1276 }
1277
1287 template < class R >
1288 void resize ( size_type count, const R & value ) {
1289 for ( size_type i = count; i < m_data.size ( ); ++ i ) {
1290 delete m_data [ i ];
1291 }
1292 size_type i = m_data.size ( );
1293 m_data.resize ( count );
1294 for ( ; i < count; ++ i ) {
1295 m_data [ i ] = ext::clone ( value );
1296 }
1297 }
1298
1305 void shrink ( size_type count ) {
1306 for ( size_type i = count; i < m_data.size ( ); ++ i ) {
1307 delete m_data [ i ];
1308 }
1309 m_data.resize ( std::min ( count, m_data.size ( ) ) );
1310 }
1311
1318 void swap ( ptr_vector & other ) {
1319 std::swap ( this->m_data, other.m_data );
1320 }
1321
1323 const ptr_vector < T > & first = * this;
1324 return std::lexicographical_compare_three_way ( first.begin ( ), first.end ( ), second.begin ( ), second.end ( ) );
1325 }
1326
1338 bool operator == ( const ptr_vector < T > & second ) const {
1339 const ptr_vector < T > & first = * this;
1340 return std::equal ( first.begin ( ), first.end ( ), second.begin ( ), second.end ( ) );
1341 }
1342
1343};
1344
1356template< class T >
1358 out << "[";
1359
1360 bool first = true;
1361 for(const T& item : ptr_vector) {
1362 if(!first) out << ", ";
1363 first = false;
1364 out << item;
1365 }
1366
1367 out << "]";
1368 return out;
1369}
1370
1371} /* namespace ext */
Adaptor iterator to additionally call second dereference on the iterator dereference result.
Definition: iterator.hpp:556
Iterator base() const
The underlying iterator getter.
Definition: iterator.hpp:798
Implementation of iterator_range, i.e. pair of iterators. The class provides most notably begin and e...
Definition: range.hpp:24
Definition: ostream.h:14
Implementation of vector storing dynamicaly allocated instances of given type. The class mimicks the ...
Definition: ptr_vector.hpp:44
iterator emplace_set(const_iterator pos, Args &&... args)
Changes the value on position given by iterator pos.
Definition: ptr_vector.hpp:725
auto begin() &&noexcept
Move iterator to the begining of the values range in the vector.
Definition: ptr_vector.hpp:402
reference operator[](size_type index)
Array subscript operator.
Definition: ptr_vector.hpp:320
iterator insert(const_iterator pos, size_type count, const R &value)
Inserts the count copies of value on position given by iterator pos.
Definition: ptr_vector.hpp:857
void resize(size_type count)
Changes the size of the vector, allocates new elements if the size increases. The possibly needed val...
Definition: ptr_vector.hpp:1267
iterator insert(iterator pos, size_type count, const R &value)
Inserts the count copies of value on position given by iterator pos.
Definition: ptr_vector.hpp:840
reverse_iterator insert(reverse_iterator pos, R &&value)
Inserts the value on position given by iterator pos.
Definition: ptr_vector.hpp:807
void reserve(size_type new_cap)
Prealocates space for given number of elements. Does not shrink the vector.
Definition: ptr_vector.hpp:588
reverse_iterator insert(reverse_iterator pos, InputIt first, InputIt last)
Inserts the values from the given range to positions starting at given iterator pos.
Definition: ptr_vector.hpp:953
iterator insert(const_iterator pos, R &&value)
Inserts the value on position given by iterator pos.
Definition: ptr_vector.hpp:791
iterator insert(iterator pos, InputIt first, InputIt last)
Inserts the values from the given range to positions starting at given iterator pos.
Definition: ptr_vector.hpp:915
reference front()
Getter of a value on the lowest index.
Definition: ptr_vector.hpp:342
size_type capacity() const noexcept
Returns the preallocated size of the vector.
Definition: ptr_vector.hpp:598
const_reference back() const
Getter of a value on the highest index.
Definition: ptr_vector.hpp:372
reverse_iterator set(const_reverse_iterator pos, R &&value)
Changes the value on position given by iterator pos.
Definition: ptr_vector.hpp:686
iterator insert(const_iterator pos, std::initializer_list< R > ilist)
Inserts the values from the given initializer list to positions starting at given iterator pos.
Definition: ptr_vector.hpp:1007
iterator end() &noexcept
Iterator one past the last element of the values range in the vector.
Definition: ptr_vector.hpp:422
reverse_iterator insert(const_reverse_iterator pos, size_type count, const R &value)
Inserts the count copies of value on position given by iterator pos.
Definition: ptr_vector.hpp:895
iterator erase(const_iterator pos)
Removes element from the container at position given by parameter pos.
Definition: ptr_vector.hpp:1131
auto range() const &
Make range of non-const begin to end iterators.
Definition: ptr_vector.hpp:534
const_reference at(size_type index) const
Getter of a reference to the value on given index.
Definition: ptr_vector.hpp:308
size_type max_size() const noexcept
Returns the maximal number of values possible to store inside the container.
Definition: ptr_vector.hpp:578
reverse_iterator erase(reverse_iterator first, reverse_iterator last)
Removes elements from the container in range given parameters first and last.
Definition: ptr_vector.hpp:1199
ptr_vector(const ptr_vector &other)
Copy constrctor of the pointer vector.
Definition: ptr_vector.hpp:195
ptr_vector() noexcept=default
The default constructor creating empty vector.
void push_back(R &&value)
Appends a new value at the end of the container.
Definition: ptr_vector.hpp:1228
reverse_iterator rend() noexcept
Reverse iterator one past the last element of the reversed range of values in the vector.
Definition: ptr_vector.hpp:492
iterator erase(iterator first, iterator last)
Removes elements from the container in range given parameters first and last.
Definition: ptr_vector.hpp:1170
ptr_vector(size_type count)
The constructor of the vector of specific size. Elements of the vector are defaultly constructed valu...
Definition: ptr_vector.hpp:146
void pop_back()
Removes element from the end of the container.
Definition: ptr_vector.hpp:1253
void swap(ptr_vector &other)
Swaps two instances of pointer vector.
Definition: ptr_vector.hpp:1318
bool operator==(const ptr_vector< T > &second) const
Specialisation of equality operator for pointer vector.
Definition: ptr_vector.hpp:1338
const_iterator end() const &noexcept
Const iterator one past the last element of the values range in the vector.
Definition: ptr_vector.hpp:432
reverse_iterator emplace(reverse_iterator pos, Args &&... args)
Inserts a new value to the container at position given by parameter pos. The new value is constructed...
Definition: ptr_vector.hpp:1090
iterator emplace(iterator pos, Args &&... args)
Inserts a new value to the container at position given by parameter pos. The new value is constructed...
Definition: ptr_vector.hpp:1056
ptr_vector(InputIt first, InputIt last)
Constructor of the vector from range specified by iterators.
Definition: ptr_vector.hpp:160
const_reverse_iterator rend() const noexcept
Reverse iterator one past the last element of the reversed range of values in the vector.
Definition: ptr_vector.hpp:502
void resize(size_type count, const R &value)
Changes the size of the vector. If the container increases in size copies of the value are used at ne...
Definition: ptr_vector.hpp:1288
reference at(size_type index)
Getter of a reference to the value on given index.
Definition: ptr_vector.hpp:296
const_reverse_iterator crend() const noexcept
Reverse iterator one past the last element of the reversed range of values in the vector.
Definition: ptr_vector.hpp:512
reverse_iterator emplace_set(reverse_iterator pos, Args &&... args)
Changes the value on position given by iterator pos.
Definition: ptr_vector.hpp:742
reverse_iterator insert(reverse_iterator pos, size_type count, const R &value)
Inserts the count copies of value on position given by iterator pos.
Definition: ptr_vector.hpp:878
iterator begin() &noexcept
Iterator to the begining of the values range in the vector.
Definition: ptr_vector.hpp:382
reverse_iterator insert(reverse_iterator pos, std::initializer_list< R > ilist)
Inserts the values from the given initializer list to positions starting at given iterator pos.
Definition: ptr_vector.hpp:1023
reference emplace_back(Args &&... args)
Appends a new value at the end of the container. The value is constructed inside the method using pro...
Definition: ptr_vector.hpp:1245
reverse_iterator rbegin() noexcept
Reverse iterator to the begining of the reversed range of values in the vector.
Definition: ptr_vector.hpp:462
iterator insert(iterator pos, std::initializer_list< R > ilist)
Inserts the values from the given initializer list to positions starting at given iterator pos.
Definition: ptr_vector.hpp:991
size_type size() const noexcept
Getter of the vector size.
Definition: ptr_vector.hpp:568
const_reference front() const
Getter of a value on the lowest index.
Definition: ptr_vector.hpp:352
auto end() &&noexcept
Move iterator to the begining of the values range in the vector.
Definition: ptr_vector.hpp:442
iterator erase(iterator pos)
Removes element from the container at position given by parameter pos.
Definition: ptr_vector.hpp:1119
ptr_vector< T > & operator=(const ptr_vector< T > &other)
The copy operator of assignment.
Definition: ptr_vector.hpp:223
iterator set(const_iterator pos, R &&value)
Changes the value on position given by iterator pos.
Definition: ptr_vector.hpp:649
iterator insert(const_iterator pos, InputIt first, InputIt last)
Inserts the values from the given range to positions starting at given iterator pos.
Definition: ptr_vector.hpp:931
void assign(InputIt first, InputIt last)
Sets the content of the vector to values in the given range.
Definition: ptr_vector.hpp:269
const_reverse_iterator crbegin() const noexcept
Reverse iterator to the begining of the reversed range of values in the vector.
Definition: ptr_vector.hpp:482
void assign(size_type count, const R &value)
Sets the content of the vector to value copied count times.
Definition: ptr_vector.hpp:254
iterator emplace_set(iterator pos, Args &&... args)
Changes the value on position given by iterator pos.
Definition: ptr_vector.hpp:708
void clear() noexcept
Removes all values from the vector.
Definition: ptr_vector.hpp:614
ptr_vector(ptr_vector &&other) noexcept
Move constrctor of the pointer vector.
Definition: ptr_vector.hpp:205
std::ptrdiff_t diference_type
The type of size differences.
Definition: ptr_vector.hpp:68
const T * const_pointer
The type of pointer to constant value.
Definition: ptr_vector.hpp:92
void shrink_to_fit()
Reallocates the vector to have the miniaml space overhead.
Definition: ptr_vector.hpp:606
auto range() &&
Make range of move begin to end iterators.
Definition: ptr_vector.hpp:546
auto range() &
Make range of non-const begin to end iterators.
Definition: ptr_vector.hpp:522
iterator set(iterator pos, R &&value)
Changes the value on position given by iterator pos.
Definition: ptr_vector.hpp:633
reverse_iterator insert(const_reverse_iterator pos, std::initializer_list< R > ilist)
Inserts the values from the given initializer list to positions starting at given iterator pos.
Definition: ptr_vector.hpp:1039
T value_type
The type of values.
Definition: ptr_vector.hpp:56
~ptr_vector() noexcept
The destructor of the vector.
Definition: ptr_vector.hpp:213
const value_type & const_reference
The type of reference to constant values.
Definition: ptr_vector.hpp:80
value_type & reference
The type of reference to values.
Definition: ptr_vector.hpp:74
reverse_iterator insert(const_reverse_iterator pos, R &&value)
Inserts the value on position given by iterator pos.
Definition: ptr_vector.hpp:823
reference back()
Getter of a value on the highest index.
Definition: ptr_vector.hpp:362
reverse_iterator emplace(const_reverse_iterator pos, Args &&... args)
Inserts a new value to the container at position given by parameter pos. The new value is constructed...
Definition: ptr_vector.hpp:1107
iterator insert(iterator pos, R &&value)
Inserts the value on position given by iterator pos.
Definition: ptr_vector.hpp:775
reverse_iterator emplace_set(const_reverse_iterator pos, Args &&... args)
Changes the value on position given by iterator pos.
Definition: ptr_vector.hpp:759
void assign(std::initializer_list< R > ilist)
Sets the content of the vector to values in the initializer list.
Definition: ptr_vector.hpp:283
auto operator<=>(const ext::ptr_vector< T > &second) const
Definition: ptr_vector.hpp:1322
bool empty() const noexcept
Array emptines test.
Definition: ptr_vector.hpp:558
reverse_iterator set(reverse_iterator pos, R &&value)
Changes the value on position given by iterator pos.
Definition: ptr_vector.hpp:670
iterator emplace(const_iterator pos, Args &&... args)
Inserts a new value to the container at position given by parameter pos. The new value is constructed...
Definition: ptr_vector.hpp:1073
reverse_iterator erase(const_reverse_iterator pos)
Removes element from the container at position given by parameter pos.
Definition: ptr_vector.hpp:1156
reverse_iterator insert(const_reverse_iterator pos, InputIt first, InputIt last)
Inserts the values from the given range to positions starting at given iterator pos.
Definition: ptr_vector.hpp:969
const_reverse_iterator rbegin() const noexcept
Reverse iterator to the begining of the reversed range of values in the vector.
Definition: ptr_vector.hpp:472
const_iterator begin() const &noexcept
Const iterator to the begining of the values range in the vector.
Definition: ptr_vector.hpp:392
const_iterator cend() const noexcept
Iterator one past the last element of the values range in the vector.
Definition: ptr_vector.hpp:452
const_iterator cbegin() const noexcept
Iterator to the begining of the values range in the vector.
Definition: ptr_vector.hpp:412
std::size_t size_type
The type of sizes.
Definition: ptr_vector.hpp:62
iterator erase(const_iterator first, const_iterator last)
Removes elements from the container in range given parameters first and last.
Definition: ptr_vector.hpp:1183
ptr_vector(const ext::iterator_range< Iterator > &range)
Definition: ptr_vector.hpp:172
reverse_iterator erase(const_reverse_iterator first, const_reverse_iterator last)
Removes elements from the container in range given parameters first and last.
Definition: ptr_vector.hpp:1212
ptr_vector(size_type count, const R &value)
Constructor of the vector of size given by count and filled with values from value.
Definition: ptr_vector.hpp:185
T * pointer
The type of pointer to values.
Definition: ptr_vector.hpp:86
void shrink(size_type count)
Like resize but only shrinks the container. If the requested size of the vector is bigger than actual...
Definition: ptr_vector.hpp:1305
reverse_iterator erase(reverse_iterator pos)
Removes element from the container at position given by parameter pos.
Definition: ptr_vector.hpp:1144
Class extending the vector class from the standard library. Original reason is to allow printing of t...
Definition: vector.hpp:45
auto begin() &
Inherited behavior of begin for non-const instance.
Definition: vector.hpp:125
iterator erase(iterator pos)
Removes element from the container at position given by parameter pos.
Definition: vector.hpp:323
reverse_iterator insert(const_reverse_iterator pos, const T &value)
Inserts the value on position given by iterator pos.
Definition: vector.hpp:229
auto end() &
Inherited behavior of end for non-const instance.
Definition: vector.hpp:155
p second
Definition: ToRegExpAlgebraic.h:126
int i
Definition: AllEpsilonClosure.h:118
return res
Definition: MinimizeByPartitioning.h:145
Definition: sigHandler.cpp:20
constexpr const T & min(const T &a)
Definition: algorithm.hpp:310
auto clone(T &&tmp)
Wrapper around clone by means of using copy constructor or clone method if available.
Definition: clone.hpp:41
dereferencing_iterator< Iterator > dereferencer(Iterator iter)
Dereferencing adaptor construction function.
Definition: iterator.hpp:815
std::ostream & operator<<(ext::reference_wrapper< std::ostream > &os, std::ostream &(*const func)(std::ostream &))
Overloaded function allowing same operations on wrapped output stream as on the actual output stream,...
Definition: GlobalData.cpp:33
Definition: FordFulkerson.hpp:16
void swap(ext::managed_linear_set< T, Compare, Alloc > &x, ext::managed_linear_set< T, Compare, Alloc > &y)
Specialisation of swap for linear set.
Definition: managed_linear_set.hpp:864