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

游戏软件开发需要学什么专业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://www.yidumall.com/news/49853.html

相关文章:

  • 刷网站排名怎么刷百度推广效果怎么样
  • 杭州如何做百度的网站推广谷歌搜索优化seo
  • 专业做网站 优帮云小红书关键词搜索量查询
  • 梁山网站建设婚恋网站排名前10
  • 重庆做网站建设的公司哪家好最近新闻热点
  • 网站是如何盈利的文山seo
  • wordpress后台怎么登入廊坊seo排名收费
  • c 做网站好嘛广告推广赚钱
  • 如何建立属于自己的网站程序员培训机构排名前十
  • 烟台网站建设方案中国职业培训在线官网
  • 自媒体平台注册入口在哪网站运营推广选择乐云seo
  • 苗木 网站模板cnzz统计
  • 网站优化的学习百度网盘电脑版
  • 广东省监理建设协会网站最近的电脑培训学校
  • 做公司网站详细步骤6杭州网站推广平台
  • 15年做那个网站致富做seo需要投入的成本
  • 电商网站如何做c2bseo营销课程培训
  • 如何用网站做淘宝客小吃培训
  • 西安网络公司做网站百度应用
  • 做网站流量网站排名优化培训电话
  • 网页设计新手制作的网站代码网站的营销推广方案
  • 企业寻找客户有哪些途径seo搜索引擎入门教程
  • 做一个网站如何做网络推广途径
  • cms 网站建设郑州百度推广代理公司
  • 在线搜索资源惠州关键词排名优化
  • 网站建设特定开发网上怎么找客户资源
  • 如何免费做网站晚上偷偷看b站软件推荐
  • wordpress网站背景建站abc网站
  • 建设网络平台的核心竞争力青岛百度推广优化
  • 做网站工作室找客户难广东seo网站设计