关于标准库vector的介绍:http://www.cplusplus.com/reference/vector/vector/
1 #pragma once 2 3 #include<memory> 4 #include<cassert> 5 #include<algorithm> 6 #include<iterator> 7 8 template< class T, class Alloc = std::allocator<T> > class myvector 9 { 10 public: 11 typedef T value_type; 12 typedef size_t size_type; 13 typedef ptrdiff_t difference_type; 14 typedef value_type& reference; 15 typedef const value_type& const_reference; 16 typedef value_type* pointer; 17 typedef const value_type const_pointer; 18 typedef value_type* iterator; 19 typedef const value_type* const_iterator; 20 protected: 21 std::allocator<value_type> _alloc; 22 iterator _start; 23 iterator _end; 24 iterator _end_of_storage; 25 26 public: 27 myvector(); 28 myvector(size_type n, const T& value); 29 myvector(size_type n); 30 myvector(iterator first, iterator last); 31 myvector(const myvector& v); 32 myvector& operator=(const myvector& rhs); 33 ~myvector(); 34 35 iterator begin() const; 36 iterator end() const; 37 const_iterator cbegin() const; 38 const_iterator cend() const; 39 std::reverse_iterator<iterator> rbegin() const; 40 std::reverse_iterator<iterator> rend() const; 41 std::reverse_iterator<const_iterator> crbegin(); 42 std::reverse_iterator<const_iterator> crend() const; 43 44 size_type size() const; 45 size_type capacity() const; 46 bool empty() const; 47 void swap(myvector& v); 48 49 reference front() const; 50 reference back() const; 51 reference operator[] (size_type n); 52 53 void push_back(const T& value); 54 void pop_back(); 55 void insert(iterator position, size_type n, const T& value); 56 57 iterator erase(iterator position); 58 iterator erase(iterator first, iterator last); 59 void clear(); 60 61 private: 62 void _destroy(iterator first, iterator last); 63 void insert_aux(iterator position, const T& value); 64 };
其中内存分配相关用的标准库<memory>,反向迭代器也直接用标准库<iterator>构造,没有做异常处理。
详细代码:https://github.com/Zzzy14/MyDataStructure/tree/master/MyVector
参考资料:1、https://github.com/yqtaowhu/DataStructureAndAlgorithm/blob/master/DataStructure/vector/myVector.h
2、侯捷《STL源码剖析》