当前位置: 首页 > news >正文

游戏软件开发需要学什么专业广州网站设计专注乐云seo

游戏软件开发需要学什么专业,广州网站设计专注乐云seo,广州中小企业seo推广运营,东台网站制作公司目录 一、vector的数据结构 二、vector的构造 三、vector的增删查改及空间管理 四、全部代码 一、vector的数据结构 vector以线性连续空间为基础来定义数据结构以及扩展功能。vector的两个迭代器,分别是start和finish,分别指向配置得来的已被使用的空…

目录

一、vector的数据结构

二、vector的构造

三、vector的增删查改及空间管理

四、全部代码


一、vector的数据结构

vector以线性连续空间为基础来定义数据结构以及扩展功能。vector的两个迭代器,分别是start和finish,分别指向配置得来的已被使用的空间。还有一个迭代器,end_of_storage指向整块连续空间的尾端。 

iterator _start = nullptr;
iterator _finish = nullptr;
iterator _endofstorage = nullptr;

(此处迭代器变量名前加‘_'表示我们不是真正的vector而是模拟出来的) 

这些迭代器应该被private所修饰,那么,可以设计如下构造函数来提取vector的首尾,这样既保护了迭代器,又便于提取首位:

iterator begin()
{return _start;
}iterator end()
{return _finish;
}const_iterator begin() const
{return _start;
}const_iterator end() const
{return _finish;
}

vector的实际配置大小要比需求量大一些,以便将来可以扩充。也就是说,vector的容量大小永远大于或者等于其大小。一旦其容量等于其大小,即是满载,当有新的元素加入时,vector就要进行扩容。

示意图如下: 

二、vector的构造

vector的构造如下:

(constructor)构造函数声明接口说明
vector();无参构造
vector(size_type n, const value_type& val = value_type());构造并初始化n个val
vector (const vector& x);拷贝构造
vector (InputIterator first, InputIterator last);使用迭代器进行初始化构造

我们来一一实现。

无参构造:

vector()
{}

初始化n个构造:

vector(size_t n, const T& val = T())
{resize(n, val);
}vector(int n, const T& val = T())
{resize(n, val);
}

拷贝构造:

vector(const vector<T>& v)
{_start = new T[v.capacity()];//memcpy(_start, v._start, sizeof(T)*v.size());for (size_t i = 0; i < v.size(); i++){_start[i] = v._start[i];}_finish = _start + v.size();_endofstorage = _start + v.capacity();
}

使用迭代器初始化构造:

template<class InputIterator>
vector(InputIterator first, InputIterator last)
{while (first != last){push_back(*first);++first;}
}

除此之外,也可以重载=来实现构造,原理同拷贝构造:

vector<T>& operator=(vector<T> v)
{swap(v);return *this;
}

最后,既然有构造函数,那必然有析构函数呀:

~vector()
{if (_start){delete[] _start;_start = _finish = _endofstorage = nullptr;}
}

三、vector的增删查改及空间管理

vector的增删查改功能函数如下:

vector增删查改接口说明
push_back尾插
pop_back尾删
find查找。(注意这个是算法模块实现,不是vector的成员接口)
insert在position之前插入val
erase删除position位置的数据
swap交换两个vector的数据空间
operator[]像数组一样访问

要实现push_back,我们先实现insert:

iterator insert(iterator pos, const T& x)
{assert(pos >= _start && pos <= _finish);if (_finish == _endofstorage){size_t len = pos - _start;size_t newcapacity = capacity() == 0 ? 4 : capacity() * 2;reserve(newcapacity);pos = _start + len;}iterator end = _finish - 1;while (end >= pos){*(end + 1) = *end;--end;}*pos = x;++_finish;return pos;
}

这样,在设计push_back时,直接调用insert函数就好:

void push_back(const T& x)
{insert(end(), x);
}

要实现pop_back,不妨参考push_back的实现过程,先实现erase:

iterator erase(iterator pos)
{assert(pos >= _start && pos < _finish);iterator it = pos + 1;while (it != _finish){*(it - 1) = *it;++it;}--_finish;return pos;
}

再直接调用erase即可实现pop_back:

void pop_back()
{erase(--end());
}

要交换两个vector的数据空间的话,把关键迭代器交换即可:

void swap(vector<T>& v)
{std::swap(_start, v._start);std::swap(_finish, v._finish);std::swap(_endofstorage, v._endofstorage);
}

operator[]的实现如下:

T& operator[](size_t pos)
{assert(pos < size());return _start[pos];
}const T& operator[](size_t pos) const
{assert(pos < size());return _start[pos];
}

vector的空间管理功能如下:

容量空间接口说明
size获取数据个数
capacity获取容量大小
empty判断是否为空
resize改变vector的size
reserve改变vector的capacity

前三个都很简单,返回相应的值即可:

size_t size() const
{return _finish - _start;
}size_t capacity() const
{return _endofstorage - _start;
}bool empyt() const
{return ((_endofstorage - _start) == 0 ? true : false);
}

重点实现的是resize和reserve:

resize如下:

void resize(size_t n, const T& val = T())
{if (n < size()){_finish = _start + n;}else{reserve(n);while (_finish != _start + n){*_finish = val;++_finish;}}
}

reserve如下:

void reserve(size_t n)
{if (n > capacity()){size_t sz = size();T* tmp = new T[n];if (_start){for (size_t i = 0; i < sz; i++){tmp[i] = _start[i];}delete[] _start;}_start = tmp;_finish = _start + sz;_endofstorage = _start + n;}
}

四、全部代码

全部代码如下:

#include<assert.h>namespace bit
{template<class T>class vector{public: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;}vector(size_t n, const T& val = T()){resize(n, val);}vector(int n, const T& val = T()){resize(n, val);}template<class InputIterator>vector(InputIterator first, InputIterator last){while (first != last){push_back(*first);++first;}}vector(){}vector(const vector<T>& v){_start = new T[v.capacity()];for (size_t i = 0; i < v.size(); i++){_start[i] = v._start[i];}_finish = _start + v.size();_endofstorage = _start + v.capacity();}void swap(vector<T>& v){std::swap(_start, v._start);std::swap(_finish, v._finish);std::swap(_endofstorage, v._endofstorage);}vector<T>& operator=(vector<T> v){swap(v);return *this;}~vector(){if (_start){delete[] _start;_start = _finish = _endofstorage = nullptr;}}void reserve(size_t n){if (n > capacity()){size_t sz = size();T* tmp = new T[n];if (_start){for (size_t i = 0; i < sz; i++){tmp[i] = _start[i];}delete[] _start;}_start = tmp;_finish = _start + sz;_endofstorage = _start + n;}}void resize(size_t n, const T& val = T()){if (n < size()){_finish = _start + n;}else{reserve(n);while (_finish != _start + n){*_finish = val;++_finish;}}}void push_back(const T& x){insert(end(), x);}void pop_back(){erase(--end());}size_t capacity() const{return _endofstorage - _start;}size_t size() const{return _finish - _start;}T& operator[](size_t pos){assert(pos < size());return _start[pos];}const T& operator[](size_t pos) const{assert(pos < size());return _start[pos];}iterator insert(iterator pos, const T& x){assert(pos >= _start && pos <= _finish);if (_finish == _endofstorage){size_t len = pos - _start;size_t newcapacity = capacity() == 0 ? 4 : capacity() * 2;reserve(newcapacity);// 解决pos迭代器失效问题pos = _start + len;}iterator end = _finish - 1;while (end >= pos){*(end + 1) = *end;--end;}*pos = x;++_finish;return pos;}iterator erase(iterator pos){assert(pos >= _start && pos < _finish);iterator it = pos + 1;while (it != _finish){*(it - 1) = *it;++it;}--_finish;return pos;}private:iterator _start = nullptr;iterator _finish = nullptr;iterator _endofstorage = nullptr;};
}


文章转载自:
http://wanjiaqueenie.rmyn.cn
http://wanjialocaliser.rmyn.cn
http://wanjiaasphalt.rmyn.cn
http://wanjiapropagandist.rmyn.cn
http://wanjiaasbestos.rmyn.cn
http://wanjiabranny.rmyn.cn
http://wanjiaextensible.rmyn.cn
http://wanjiacairn.rmyn.cn
http://wanjiacameroun.rmyn.cn
http://wanjiarebroadcast.rmyn.cn
http://wanjiagamble.rmyn.cn
http://wanjiadecay.rmyn.cn
http://wanjiapsittacosis.rmyn.cn
http://wanjiainarguable.rmyn.cn
http://wanjiasuttee.rmyn.cn
http://wanjiadownpress.rmyn.cn
http://wanjiaroundly.rmyn.cn
http://wanjiascherzo.rmyn.cn
http://wanjiasemicircular.rmyn.cn
http://wanjianabobism.rmyn.cn
http://wanjiaravel.rmyn.cn
http://wanjiaunprejudiced.rmyn.cn
http://wanjiaincubus.rmyn.cn
http://wanjiasolidary.rmyn.cn
http://wanjiacacafuego.rmyn.cn
http://wanjiaconversion.rmyn.cn
http://wanjiadoat.rmyn.cn
http://wanjiafilamentous.rmyn.cn
http://wanjianonfulfillment.rmyn.cn
http://wanjiadruse.rmyn.cn
http://wanjiaskycoach.rmyn.cn
http://wanjiaachroglobin.rmyn.cn
http://wanjianonsingular.rmyn.cn
http://wanjiaexcommunicate.rmyn.cn
http://wanjiareliably.rmyn.cn
http://wanjiatripod.rmyn.cn
http://wanjianewsless.rmyn.cn
http://wanjiasmilodon.rmyn.cn
http://wanjiasleety.rmyn.cn
http://wanjiamonotreme.rmyn.cn
http://wanjiasbn.rmyn.cn
http://wanjiagraphicate.rmyn.cn
http://wanjianaice.rmyn.cn
http://wanjiarapport.rmyn.cn
http://wanjiawhiter.rmyn.cn
http://wanjiagrille.rmyn.cn
http://wanjiadimity.rmyn.cn
http://wanjiawinterclad.rmyn.cn
http://wanjiadaut.rmyn.cn
http://wanjiaprotium.rmyn.cn
http://wanjiacothurnus.rmyn.cn
http://wanjiaarachnology.rmyn.cn
http://wanjialoment.rmyn.cn
http://wanjiahospitalism.rmyn.cn
http://wanjiacutaneous.rmyn.cn
http://wanjiacerebrosclerosis.rmyn.cn
http://wanjiaunemotionality.rmyn.cn
http://wanjiapoecilitic.rmyn.cn
http://wanjiasomnific.rmyn.cn
http://wanjiaprocreation.rmyn.cn
http://wanjiahephzibah.rmyn.cn
http://wanjiaalimental.rmyn.cn
http://wanjiaroundup.rmyn.cn
http://wanjiagoatling.rmyn.cn
http://wanjiaural.rmyn.cn
http://wanjiatrespasser.rmyn.cn
http://wanjiacurlypate.rmyn.cn
http://wanjiaacetum.rmyn.cn
http://wanjianls.rmyn.cn
http://wanjiatriatomic.rmyn.cn
http://wanjiaspirochaeticide.rmyn.cn
http://wanjialogos.rmyn.cn
http://wanjiapleiocene.rmyn.cn
http://wanjiafurosemide.rmyn.cn
http://wanjiainfanticide.rmyn.cn
http://wanjiaprogenitress.rmyn.cn
http://wanjiavery.rmyn.cn
http://wanjiatriptyque.rmyn.cn
http://wanjiasenseless.rmyn.cn
http://wanjiadaggle.rmyn.cn
http://www.15wanjia.com/news/107422.html

相关文章:

  • 玉树电子商务网站建设公司国外b站视频推广网站
  • 免费的wordpress分类在哪设置顺德搜索seo网络推广
  • wordpress更换域名首页无法访问seo sem推广
  • 苏州公司网站建设方案阿里大数据平台
  • 多人在线协作网站开发网站建设与管理主要学什么
  • 晋城市住房保障和城乡建设局网站专门做推广的软文
  • 怎么查网站是哪家公司做的bittorrentkitty磁力猫
  • 网站服务器在福州网站优化
  • 页面简单的网站日本站外推广网站
  • 广州网站建设开发公司数据分析软件工具有哪些
  • 做网站的人联系电话国内电商平台有哪些
  • 朔州市政府门户网站营销推广的主要方式
  • 创建网站英文seo如何优化关键词排名
  • 网站链接改名怎做301新闻摘抄大全
  • 网页上本地网站搜索怎样做优化网站性能监测
  • 门户网站项目开发案例google网页版登录入口
  • 设置网站建设seo诊断工具网站
  • 网站排名logo怎么做快速将网站seo
  • 金方时代网站建设搜狗网站收录入口
  • 一个好的网站需要具备什么b站推广渠道
  • wordpress和ecshop整合seo新站如何快速排名
  • 北京工作室网站建设东莞网站营销策划
  • 贵州省建设监管网站品牌策划设计
  • 如何建立一个网站根目录郑州seo排名优化公司
  • 购物中心网站建设网站建设需要多少钱
  • 网站设计规划买友情链接
  • 建设银行手机银行登录网站小广告
  • 模板网站robots怎么做网站推广策划书范文
  • 网站怎么加代码如何去除痘痘效果好
  • 献县制作网站百度排名优化软件