织梦网站程序5.7首页模板,wordpress热门文章插件,开家做网站公司有哪些,wordpress做小说由于我们之前已经详细讲解了string接口#xff0c;而vector接口大都在string上有#xff0c;所以大家只需自行翻阅前面文章就可以明白接口的使用了#xff0c;所以#xff0c;这里我们只实现vector#xff0c;注意#xff1a;vector会有迭代器失效的情况#xff0c;大家…由于我们之前已经详细讲解了string接口而vector接口大都在string上有所以大家只需自行翻阅前面文章就可以明白接口的使用了所以这里我们只实现vector注意vector会有迭代器失效的情况大家一定要仔细看看代码。
#pragma once
#include assert.h
#include iostream
#include string.h
namespace cx
{//模板类templateclass Tclass vector{public:typedef T* iterator;typedef const T* const_iterator;//构造函数:vector(){}//传统写法/*vector(const vectorT v){_start new T[v.capacity()];memcpy(_start, v._start, v.size() * sizeof(T));_finish _start v.size();_endofstorage _start v.capacity();}*///现代写法vector(const vectorT v){reserve(v.capacity());for (const auto e : v){*_finish e;_finish;}}vector(size_t n, const T val T()){resize(n,val);}/*template class InputIteratorvector(InputIterator first, InputIterator last){while (first ! last){push_back(*first);first;}}*///析构函数~vector(){if (_start){delete[] _start;_start _finish _endofstorage nullptr;}}vectorT operator(vectorT v){swap(v);return *this;}//迭代器iterator begin(){return _start;}iterator end(){return _finish;}const_iterator begin()const{return _start;}const_iterator end()const{return _finish;}//计算大小size_t size()const {return end() - begin();}size_t capacity()const {return _endofstorage - _start;}//操作:bool empty() const{return _finish _start;}void swap(vectorT v){std::swap(_start, v._start);std::swap(_finish, v._finish);std::swap(_endofstorage, v._endofstorage);}void reserve(size_t n){if (n capacity()){size_t old size();T* tmp new T[n];if (_start){memcpy(tmp, _start, sizeof(T) * old);delete[] _start;}_start tmp;_finish _start old;_endofstorage _start n;}}void push_back(const T x){//检查是否扩容if (_finish _endofstorage){size_t newcapacity capacity() 0 ? 4 : 2 * capacity();reserve(newcapacity);}*_finish x;_finish;}void pop_back(){assert(size() 0);_finish--;}T operator[](size_t pos){assert(pos size());return _start[pos];}T operator[] (size_t pos) const{assert(pos size());return _start[pos];}iterator insert(iterator pos, const T val){assert(pos _finish pos _start);if (_finish _endofstorage){size_t len pos - _start;reserve(capacity() 0 ? 4 : 2 * capacity());pos _start len;}//memmove(pos 1, pos, sizeof(T) * (_finish - pos));iterator end _finish - 1;while (end pos){*(end 1) *(end);end--;}*pos val;_finish;return pos;}/*void insert(iterator pos, const T x){//检查assert(pos _start);assert(pos _finish);if (_finish _endofstorage){size_t len pos - _start;reserve(capacity() 0 ? 4 : 2 * capacity());//注意pos位置也要改变pos _start len;}memmove(pos 1, pos, sizeof(T) * (_finish - pos));*pos x;_finish;}*/iterator erase(iterator pos){assert(pos _finish pos _start);iterator it pos 1;while (it _finish){*(it - 1) *it;it;}_finish--;return pos;}iterator erase(iterator first, iterator last){}void resize(size_t n, T val T()){if (n size()){reserve(n);while (_finish _start n){*_finish val;_finish;}}else{_finish _start n;}}T front(){return *_start;}const T front() const{*_start;}T back(){return *_finish;}const T back() const{return *_finish;}T at(size_t pos){assert(pos size());return _start[pos];}const T at(size_t pos) const{assert(pos size());return _start[pos];}void assign(size_t n, const T val){assert(_start _finish);reserve(n);while (_finish ! _endofstorage){*_finish val;_finish;}}void clear(){resize(0);}private:iterator _start nullptr;iterator _finish nullptr;iterator _endofstorage nullptr;};
}最后感谢大家的支持