模拟实现vector类
实现代码:vector.h
#pragma once
#include<assert.h>
#include<iostream>
using namespace std;namespace bit
{template<class T>class vector{public:// Vector的迭代器是一个原生指针typedef T* iterator;typedef const T* const_iterator;iterator begin(){return _start;}iterator end(){return _finish;}const_iterator begin()const{return _start;}const_iterator end() const{return _finish;}// construct and destroyvector(){}vector(size_t n, const T& value = T()){reserve(n);for (size_t i = 0; i < n; i++){push_back(value);}}vector(int n, const T& value = T()){reserve(n);for (int i = 0; i < n; i++){push_back(value);}}// 类模板的成员函数可以是函数模板template<class InputIterator>vector(InputIterator first, InputIterator last){while (first != last){push_back(*first);++first;}}//v2(v1)vector(const vector<T>& v){reserve(v.capacity());for (auto& e : v){push_back(e);}}// vector<int> v1 = { 1,2,3,4,5,6,7,8,9,10 };vector(initializer_list<T> il){reserve(il.size());for (auto& e : il){push_back(e);}}vector<T>& operator= (vector<T> v){swap(v);return *this;}~vector(){delete[] _start;_start = _finish = _endofstorage = nullptr;}// capacitysize_t size() const{return _finish - _start;}size_t capacity() const{return _endofstorage - _start;}void reserve(size_t n){if (n > capacity()){size_t old_size = size();T* tmp = new T[n];//memcpy(tmp, _start, size() * sizeof(T)); T是string,调用memcpy的话,string就是浅拷贝了for (size_t i=0;i<old_size;i++){tmp[i] = _start[i];}delete[] _start;_start = tmp;_finish = tmp + old_size;_endofstorage = tmp + n;}}void resize(size_t n, const T& val = T()){if (n > size()){reserve(n);while (_finish < _start + n){*_finish = val;++_finish;}}else{_finish = _start + n;}}///access///T& operator[](size_t pos){assert(pos < size());return _start[pos];}const T& operator[](size_t pos) const{assert(pos < size());return _start[pos];}///modify/void swap(vector<T>& v){std::swap(_start, v._start);std::swap(_finish, v._finish);std::swap(_endofstorage, v._endofstorage);}void push_back(const T& val){if (_finish == _endofstorage){reserve(capacity() == 0 ? 4 : capacity() * 2);}*_finish = val;++_finish;}void pop_back(){assert(!empty());--_finish;}bool empty(){return _start == _finish;}iterator insert(iterator pos, const T& val){assert(pos <= _finish && pos >= _start);if (_finish == _endofstorage){size_t len = pos - _start;reserve(capacity() == 0 ? 4 : capacity() * 2);// 如果扩容了要更新pospos = _start + len;}it