@@ -15,8 +15,10 @@ namespace vtr {
1515//
1616// If you need more std::map-like (instead of std::vector-like) behaviour see
1717// vtr::vector_map.
18- template <typename K, typename V>
19- class vector : private std ::vector<V> {
18+ template <typename K, typename V, typename Allocator = std::allocator<V>>
19+ class vector : private std ::vector<V, Allocator> {
20+ using storage = std::vector<V, Allocator>;
21+
2022 public:
2123 typedef K key_type;
2224
@@ -25,71 +27,71 @@ class vector : private std::vector<V> {
2527
2628 public:
2729 // Pass through std::vector's types
28- using typename std::vector<V>::value_type ;
29- using typename std::vector<V>::allocator_type ;
30- using typename std::vector<V>::reference ;
31- using typename std::vector<V> ::const_reference;
32- using typename std::vector<V>::pointer ;
33- using typename std::vector<V>::const_pointer ;
34- using typename std::vector<V> ::iterator;
35- using typename std::vector<V>::const_iterator ;
36- using typename std::vector<V>::reverse_iterator ;
37- using typename std::vector<V>::const_reverse_iterator ;
38- using typename std::vector<V>::difference_type ;
39- using typename std::vector<V>::size_type ;
40-
41- // Pass through std::vector's methods
42- using std::vector<V>::vector;
43-
44- using std::vector<V> ::begin;
45- using std::vector<V>::end ;
46- using std::vector<V>::rbegin ;
47- using std::vector<V>::rend ;
48- using std::vector<V>::cbegin ;
49- using std::vector<V>::cend ;
50- using std::vector<V>::crbegin ;
51- using std::vector<V>::crend ;
52-
53- using std::vector<V>::size ;
54- using std::vector<V>::max_size ;
55- using std::vector<V>::resize ;
56- using std::vector<V>::capacity ;
57- using std::vector<V>::empty ;
58- using std::vector<V>::reserve ;
59- using std::vector<V>::shrink_to_fit ;
60-
61- using std::vector<V>::front ;
62- using std::vector<V>::back ;
63- using std::vector<V>::data ;
64-
65- using std::vector<V> ::assign;
66- using std::vector<V>::push_back ;
67- using std::vector<V>::pop_back ;
68- using std::vector<V>::insert ;
69- using std::vector<V> ::erase;
70- using std::vector<V>::swap ;
71- using std::vector<V>::clear ;
72- using std::vector<V>::emplace ;
73- using std::vector<V>::emplace_back ;
74- using std::vector<V>::get_allocator ;
30+ using typename storage::allocator_type ;
31+ using typename storage::const_iterator ;
32+ using typename storage::const_pointer ;
33+ using typename storage ::const_reference;
34+ using typename storage::const_reverse_iterator ;
35+ using typename storage::difference_type ;
36+ using typename storage ::iterator;
37+ using typename storage::pointer ;
38+ using typename storage::reference ;
39+ using typename storage::reverse_iterator ;
40+ using typename storage::size_type ;
41+ using typename storage::value_type ;
42+
43+ // Pass through storagemethods
44+ using std::vector<V, Allocator >::vector;
45+
46+ using storage ::begin;
47+ using storage::cbegin ;
48+ using storage::cend ;
49+ using storage::crbegin ;
50+ using storage::crend ;
51+ using storage::end ;
52+ using storage::rbegin ;
53+ using storage::rend ;
54+
55+ using storage::capacity ;
56+ using storage::empty ;
57+ using storage::max_size ;
58+ using storage::reserve ;
59+ using storage::resize ;
60+ using storage::shrink_to_fit ;
61+ using storage::size ;
62+
63+ using storage::back ;
64+ using storage::data ;
65+ using storage::front ;
66+
67+ using storage ::assign;
68+ using storage::clear ;
69+ using storage::emplace ;
70+ using storage::emplace_back ;
71+ using storage ::erase;
72+ using storage::get_allocator ;
73+ using storage::insert ;
74+ using storage::pop_back ;
75+ using storage::push_back ;
76+ using storage::swap ;
7577
7678 // Don't include operator[] and at() from std::vector,
7779 // since we redine them to take key_type instead of size_t
7880 reference operator [](const key_type id) {
7981 auto i = size_t (id);
80- return std::vector<V> ::operator [](i);
82+ return storage ::operator [](i);
8183 }
8284 const_reference operator [](const key_type id) const {
8385 auto i = size_t (id);
84- return std::vector<V> ::operator [](i);
86+ return storage ::operator [](i);
8587 }
8688 reference at (const key_type id) {
8789 auto i = size_t (id);
88- return std::vector<V> ::at (i);
90+ return storage ::at (i);
8991 }
9092 const_reference at (const key_type id) const {
9193 auto i = size_t (id);
92- return std::vector<V> ::at (i);
94+ return storage ::at (i);
9395 }
9496
9597 // Returns a range containing the keys
0 commit comments