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

怎么提升网站的排名东营网站建设服务电话

怎么提升网站的排名,东营网站建设服务电话,软件开发需要考什么专业证书,用dw做网站 主题是哪个文章目录 实现的功能模拟实现迭代器失效隐含浅拷贝问题 实现的功能 模拟实现 由于前面实现了string#xff0c;因此这里实现过程不为重点#xff0c;重点为关于迭代器失效和拷贝问题 template class T class vector { public:typedef T* iterator;typedef const T*… 文章目录 实现的功能模拟实现迭代器失效隐含浅拷贝问题 实现的功能 模拟实现 由于前面实现了string因此这里实现过程不为重点重点为关于迭代器失效和拷贝问题 template class T class vector { public:typedef T* iterator;typedef const T* const_iterator;// constructorvector():_start(nullptr), _finish(nullptr), _endofstorge(nullptr){}template class InputIteratorvector(InputIterator first, InputIterator last): _start(nullptr), _finish(nullptr), _endofstorge(nullptr){while (first ! last){push_back(*first);first;}}vector(size_t n, const T val T()){reserve(n);for (int i 0; i n; i){push_back(val);}}vector(int n, const T val T()){reserve(n);for (int i 0; i n; i){push_back(val);}}vector(vectorT v){reserve(v.capacity());for (auto e : v){push_back(e);}}// destructor~vector(){delete[] _start;_start _finish _endofstorge nullptr;}// operatorvectorT operator(vectorT v){//_start new T[v.capacity()];//_finish _start v.size();//_endofstorge _start v.capacity();swap(v);return *this;}// capacitysize_t size(){return _finish - _start;}void resize(size_t num, const T val T()){if (num size()){_finish _start num;}else{while (_finish ! _start num){push_back(val);_finish;}}}size_t capacity(){return _endofstorge - _start;}void reserve(size_t num){if (num capacity()){T* tmp new T[num];size_t sz size();if (_start){for (size_t i 0; i sz; i){tmp[i] _start[i];}delete[] _start;}_start tmp;_finish _start sz;_endofstorge _start num;}}bool empty(){if (_start _finish)return true;return false;}// element accessT operator[](size_t pos){return *(_start pos);}// iteratoriterator begin(){return _start;}iterator end(){return _finish;}const_iterator begin() const{return _start;}const_iterator end() const{return _finish;}// modifiervoid push_back(T data){if (_finish _endofstorge){size_t sz size();size_t newcapacity capacity() 0 ? 4 : capacity() * 2;T* tmp new T[newcapacity];if (_start){//memcpy(tmp, _start, sizeof(T) * size());for (size_t i 0; i sz; i){tmp[i] _start[i];}delete[] _start;}_finish tmp sz;_endofstorge tmp newcapacity;_start tmp;}assert(_finish);*(_finish) data;_finish;}void pop_back(){--_finish;}void insert(iterator pos, const T x){assert(pos _start);assert(pos _finish);if (_finish _endofstorge){size_t len pos - _start;reserve(capacity() 0 ? 4 : capacity() * 2);pos _start len;}iterator end _finish - 1;while (end pos){*(end 1) *end;--end;}*pos x;_finish;}iterator erase(iterator pos){assert(pos _start);assert(pos _finish);iterator it pos 1;while (it _finish){*(it - 1) *it;it;}--_finish;return pos;}void swap(vectorT v){std::swap(_start, v._start);std::swap(_finish, v._finish);std::swap(_endofstorge, v._endofstorge);}private:iterator _start;iterator _finish;iterator _endofstorge; };迭代器失效 首先要清楚什么是迭代器失效迭代器失效的应用场景是哪里 这里举一个例子迭代器可能会在进行insert的过程中失效具体失效原因 迭代器本身可以理解成就是一个指针而这个指针指向的空间又是固定的因此这里当使用指针时如果原来的空间由于扩容导致原来空间被销毁那么这个迭代器所指向的内容其实也就没有任何意义了这也就是迭代器失效的原因 用下面这个例子来理解会更方便一些 void test_vector1() {vectorint v(5,5);auto it v.begin();v.insert(it, 10);v.insert(it, 10);v.insert(it, 10);v.insert(it, 10);v.insert(it, 10);for (auto e : v){cout e ;}cout endl; }这里定义了一个vector里面有5个数字5此时_start所指向的空间是一个区域因此这里使用迭代器就可以找到容器的头部实现插入是很方便的 但当插入数据后_start所指向的空间发生改变了而这里的迭代器却依旧指向原来的位置在这种情况下就是经典的迭代器失效的问题因此在一些编译器下标准库下的迭代器如果被insert/erase所使用迭代器是要被强制检查不可以被使用的 在有些编译器下不会进行检查因此就会产生迭代器失效的情况基于这样的情况在使用迭代器时要注意是否有失效的可能 隐含浅拷贝问题 先来看下面代码 void push_back(T data){if (_finish _endofstorge){size_t sz size();size_t newcapacity capacity() 0 ? 4 : capacity() * 2;T* tmp new T[newcapacity];if (_start){//memcpy(tmp, _start, sizeof(T) * size());for (size_t i 0; i sz; i){tmp[i] _start[i];}delete[] _start;}_finish tmp sz;_endofstorge tmp newcapacity;_start tmp;}assert(_finish);*(_finish) data;_finish;}如果你对memcpy是否可以使用存在疑惑可以看下面的测试函数 void test_vector1() {vectorstring v;v.push_back(111111111111111111111);v.push_back(111111111111111111111);v.push_back(111111111111111111111);v.push_back(111111111111111111111);v.push_back(111111111111111111111);for (auto e : v){cout e ;}cout endl; }如果使用memcpy的结果是这样的 出现这样结果的原因也很简单这是因为memcpy本质上其实是一种浅拷贝它的工作原理是把每一个字节的内容都进行拷贝因此这样其实是一种浅拷贝用下面的机制来解释可以看成 因此我们采用了改良版的拷贝机制让这些数据也进行一定程度的拷贝 这样就可以实现拷贝的效果
http://www.zqtcl.cn/news/103540/

相关文章:

  • 网站营销型办公室装修费用会计分录
  • 个人网站网页设计模板学校ftp服务器做网站
  • 黄江网站建设外贸公司用的采购储运财务软件
  • 优化网站公司做网站建设
  • 门户网站的盈利模式网站建设中备案
  • 代码需求网站织梦怎么关闭网站
  • 浙江工信部网站备案查询东圃做网站
  • icp网站域名怎么填写官方网站建设银行年利息是多少钱
  • 沈阳做网站好的信息流优化师证书
  • 做招聘网站创业seo优化工作
  • 如何维护网站建设外卖网站建设价钱
  • 南宁保洁网站建设乌克兰服装网站建设
  • ppt链接网站怎么做的nas云存储做视频网站
  • 上海网站制作公司联系方式设计素材网站照片
  • 林州网站建设价格网络舆情是什么意思
  • 网站外链平台的建设方法平台类型(至少5个)?兰州道路建设情况网站
  • 网站建立健全举报工作机制设计电子商务网站主页
  • 广州市建设工程交易服务中心网站沈阳百度推广哪家好
  • 个人网站备案需要什么网站建立的重要性
  • wordpress用户名西安seo代理计费
  • 网站建设前准备工作手机上传视频网站开发
  • 海口网站建设是什么意思wordpress推广码
  • 杭州市住房和城乡建设厅网站海南网站建设设计
  • 网站建设平台一般多少钱wordpress 本地上传服务器
  • 怎么给网站命名男女做羞羞羞的网站
  • 北京响应式网站建设公司信息流推广方式
  • 一级a做爰片迅雷网站微分销系统定制开发
  • 山东网站建设工作室网页设计全部代码
  • 用c 做网站可以吗注册网站什么要求
  • 销售网站排名销售型网站模板