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

美工怎么做网站效果图怎样建网站宣传产品

美工怎么做网站效果图,怎样建网站宣传产品,想做电商从哪里入手,岳阳网页hello#xff0c;各位小伙伴#xff0c;本篇文章跟大家一起学习《C#xff1a;vector的模拟实现》#xff0c;感谢大家对我上一篇的支持#xff0c;如有什么问题#xff0c;还请多多指教 #xff01; 如果本篇文章对你有帮助#xff0c;还请各位点点赞#xff01;各位小伙伴本篇文章跟大家一起学习《Cvector的模拟实现》感谢大家对我上一篇的支持如有什么问题还请多多指教 如果本篇文章对你有帮助还请各位点点赞 话不多说开始进入正题 文章目录 :maple_leaf:全代码:maple_leaf:讲解:leaves:一个类vector和一个结构体Reverse_iterator:leaves:vector的迭代器:leaves:vector的成员函数:leaves:析构函数:leaves:迭代器:leaves:交换函数:leaves:赋值重载函数:leaves:vector相关的容器函数:leaves:reserve函数:leaves:resize函数:leaves:[]重载函数:leaves:尾插函数和尾删函数:leaves:erase函数:leaves:插入函数 :maple_leaf:反向迭代器对正向迭代器的复用 全代码 #pragma once #includeiostream #include assert.h #include stdbool.husing namespace std;namespace My_vector {// 适配器 -- 复用templateclass Iterator, class Ref, class Ptrstruct Reverse_iterator{Iterator _it;typedef Reverse_iteratorIterator, Ref, Ptr Self;Reverse_iterator(Iterator it):_it(it){}Ref operator*(){Iterator tmp _it;return *(--tmp);}Ptr operator-(){return (operator*());}Self operator(){--_it;return *this;}Self operator--(){_it;return *this;}bool operator!(const Self s){return _it ! s._it;}};template class Tclass vector{public:typedef T* iterator;typedef const T* const_iterator;typedef Reverse_iteratoriterator, T, T* reverse_iterator;typedef Reverse_iteratorconst_iterator, const T, const T* const_reverse_iterator;reverse_iterator rbegin(){return iterator(end());}reverse_iterator rend(){return iterator(begin());}const_reverse_iterator rbegin(){return const_iterator(end());}const_reverse_iterator rend(){return const_iterator(begin());}vector():_start(nullptr), _finish(nullptr), _endOfStorage(nullptr){}void swap(vectorT v){std::swap(_start, v._start);std::swap(_finish, v._finish);std::swap(_endOfStorage, v._endOfStorage);}vectorT operator(vectorT v)//c a;{ // 直接崩掉就是因为现代的赋值运算符重载是传值传参,会调用拷贝构造构造个临时变量,拷贝构造也需要初始化swap(v);return *this;}vector(const vectorT v):_start(nullptr), _finish(nullptr), _endOfStorage(nullptr){reserve(v.capacity());for (auto e : v){push_back(e);}}templateclass InPutIteratorvector(InPutIterator first, InPutIterator last){while (first ! last){push_back((*first));first;}}vector(initializer_listT a){reserve(a.size());for (auto e : a){push_back(e);}}vector(size_t n, const T val T()){reserve(n);for (int i 0; i n; i){push_back(val);}}~vector(){if (_start){delete[] _start;_start _finish _endOfStorage nullptr;}}bool empty() const{return _start _finish;}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 _finish - _start;}size_t capacity()const{return _endOfStorage - _start;}void reserve(size_t n){if (n capacity()){size_t oldsize size();T* tmp new T[n];if (_start){for (size_t i 0; i oldsize; i)tmp[i] _start[i];// 3. 释放旧空间delete[] _start;}_start tmp;_finish _start oldsize;_endOfStorage _start n;}}void resize(size_t n, const T value T()){if (n size()){_finish _start n;return;}if (n capacity()){reserve(n);}iterator lt _finish;_finish _start n;while (lt ! _finish){*lt value;lt;}}T operator[](size_t i){assert(i size());return _start[i];}const T operator[](size_t i)const{assert(i size());return _start[i];}void push_back(const T t){/*if (_finish _endOfStorage){size_t newcapacity (capacity() 0) ? 4 : 2 * capacity();reserve(newcapacity);}*_finish t;_finish;*/insert(end(), t);}void popback(){assert(_start ! _finish);--_finish;}void erase(iterator pos){assert(pos _start);assert(pos _finish);iterator end pos 1;while (end _finish){*(end - 1) *end;end;}--_finish;}iterator insert(iterator pos, const T t){assert(pos _start);assert(pos _finish);// 空间不够先进行增容if (_finish _endOfStorage){//size_t size size();size_t len pos - _start;size_t newCapacity (0 capacity()) ? 4 : capacity() * 2;reserve(newCapacity);// 如果发生了增容需要重置pospos _start len;}iterator end _finish - 1;while (end pos){*(end 1) *end;--end;}*pos t;_finish;return pos;}iterator insert(iterator pos,size_t n ,const T t){assert(pos _start);assert(pos _finish);// 空间不够先进行增容while (_finish n _endOfStorage){//size_t size size();size_t len pos - _start;size_t newCapacity (0 capacity()) ? 4 : capacity() * 2;reserve(newCapacity);// 如果发生了增容需要重置pospos _start len;}iterator end _finish - 1;while (end pos){*(end n) *end;--end;}int cnt 0;while (cnt n){*pos t;pos;cnt;}_finish n;return pos;}private:iterator _start; // 指向数据块的开始iterator _finish; // 指向有效数据的尾iterator _endOfStorage; // 指向存储容量的尾}; }讲解 一个类vector和一个结构体Reverse_iterator 类vector里私有成员变量有 iterator _start; // 指向数据块的开始 iterator _finish; // 指向有效数据的尾 iterator _endOfStorage; // 指向所开空间的尾结构体Reverse_iterator成员变量有 Iterator _it;// 迭代器因为对于反向迭代器我们可以复用正向迭代器vector的迭代器 由于迭代器类似于指针所以我们在这里用指针代替 // 正向迭代器 typedef T* iterator; typedef const T* const_iterator;// 反向迭代器 typedef Reverse_iteratoriterator, T, T* reverse_iterator; typedef Reverse_iteratorconst_iterator, const T, const T* const_reverse_iterator;vector的成员函数 1.默认构造函数 vector():_start(nullptr), _finish(nullptr), _endOfStorage(nullptr) {}2.传参构造函数 传元素个数和值可不写调用该类型的构造函数 由于此原因所以内置类型也就有了自己的默认构造函数 vector(size_t n, const T val T()) {reserve(n);for (int i 0; i n; i){push_back(val);// vector的尾插成员函数} }传迭代器区间 templateclass InPutIterator vector(InPutIterator first, InPutIterator last) {while (first ! last){push_back((*first));first;} }传初始化列表 vector(initializer_listT a) {reserve(a.size());for (auto e : a){push_back(e);} }3.拷贝构造函数 vector(const vectorT v):_start(nullptr), _finish(nullptr), _endOfStorage(nullptr) {reserve(v.capacity());for (auto e : v){push_back(e);} }析构函数 ~vector() {if (_start){delete[] _start;_start _finish _endOfStorage nullptr;} }迭代器 // 正向迭代器 iterator begin() {return _start; }iterator end() {return _finish; }const_iterator begin()const {return _start; }const_iterator end()const {return _finish; }// 反向迭代器 reverse_iterator rbegin() {return iterator(end());// 复用正向迭代器 }reverse_iterator rend() {return iterator(begin());// 复用正向迭代器 }const_reverse_iterator rbegin() {return const_iterator(end());// 复用正向迭代器 }const_reverse_iterator rend() {return const_iterator(begin());// 复用正向迭代器 }交换函数 void swap(vectorT v) {std::swap(_start, v._start);std::swap(_finish, v._finish);std::swap(_endOfStorage, v._endOfStorage); }赋值重载函数 vectorT operator(vectorT v)//c a; {swap(v);// 复用交换函数return *this; }vector相关的容器函数 判断是否为空 bool empty() const {return _start _finish; }返回vrctor的大小 size_t size()const {return _finish - _start; }返回该vector所开的空间 size_t capacity()const {return _endOfStorage - _start; }reserve函数 预留空间大大降低了数组需要被重新分配大小为了增加存储空间所用的时间提高了效率 void reserve(size_t n) {if (n capacity()){size_t oldsize size();T* tmp new T[n];if (_start){for (size_t i 0; i oldsize; i)tmp[i] _start[i];// 3. 释放旧空间delete[] _start;}_start tmp;_finish _start oldsize;_endOfStorage _start n;} }由于重新分配空间会导致指针_start_finish_endOfStorage失效所以使用了oldsize记录_start和_finish的距离。 resize函数 // 扩容时可以传第二个参数value来对后面的空间初始化 void resize(size_t n, const T value T()) {// 缩容的情况if (n size()){_finish _start n;return;}// 扩容的情况if (n capacity()){reserve(n);// 开空间}iterator lt _finish;_finish _start n;while (lt ! _finish){*lt value;lt;} }[]重载函数 T operator[](size_t i) {assert(i size());// 检查是否越界访问return _start[i]; }const T operator[](size_t i)const {assert(i size());return _start[i]; }尾插函数和尾删函数 尾插函数 void push_back(const T t) {if (_finish _endOfStorage)// 判断是否需要扩容{size_t newcapacity (capacity() 0) ? 4 : 2 * capacity();reserve(newcapacity);}*_finish t;_finish;// insert(end(), t);// 复用插入函数 }尾删函数 void popback() {assert(_start ! _finish);--_finish; }erase函数 销毁函数 void erase(iterator pos) {assert(pos _start);// 判断是否越界assert(pos _finish);// 判断是否越界iterator end pos 1;while (end _finish){*(end - 1) *end;end;}--_finish; }插入函数 插入一个元素 iterator insert(iterator pos, const T t) {assert(pos _start);assert(pos _finish);// 空间不够先进行增容if (_finish _endOfStorage){//size_t size size();size_t len pos - _start;size_t newCapacity (0 capacity()) ? 4 : capacity() * 2;reserve(newCapacity);// 如果发生了增容需要重置pos迭代器失效问题pos _start len;}iterator end _finish - 1;while (end pos){*(end 1) *end;--end;}*pos t;_finish;return pos; }插入多个元素 iterator insert(iterator pos, size_t n, const T t) {assert(pos _start);assert(pos _finish);// 空间不够先进行增容while (_finish n _endOfStorage){//size_t size size();size_t len pos - _start;size_t newCapacity (0 capacity()) ? 4 : capacity() * 2;reserve(newCapacity);// 如果发生了增容需要重置pos迭代器失效问题pos _start len;}iterator end _finish - 1;while (end pos){*(end n) *end;--end;}int cnt 0;while (cnt n){*pos t;pos;cnt;}_finish n;return pos; }反向迭代器对正向迭代器的复用 这里3个模板参数就是为了让编译器去判断该调用什么类型返回值的成员函数 // 适配器 -- 复用 // 迭代器 引用 指针 templateclass Iterator, class Ref, class Ptr struct Reverse_iterator {Iterator _it;// 成员变量正向迭代器typedef Reverse_iteratorIterator, Ref, Ptr Self;// 构造函数Reverse_iterator(Iterator it):_it(it){}Ref operator*(){Iterator tmp _it;return *(--tmp);}Ptr operator-(){return (operator*());}Self operator(){--_it;return *this;}Self operator--(){_it;return *this;}bool operator!(const Self s){return _it ! s._it;} };你学会了吗 好啦本章对于《Cvector的模拟实现》的学习就先到这里如果有什么问题还请指教指教希望本篇文章能够对你有所帮助我们下一篇见 如你喜欢点点赞就是对我的支持感谢感谢
http://www.hkea.cn/news/14258422/

相关文章:

  • 网站更名策划方案如何制作一个企业网站
  • python基础教程推荐怎么关闭seo查询
  • 谷歌找网站后台关于设计的网站有哪些
  • 潍坊手机网站制作网站空间和云服务器
  • dede网站名称更改不了怎样建设公司网站小程序
  • wordpress tag页面优化seo优化一般包括哪些内容
  • 个人备案可以做盈利网站吗wordpress的登录页
  • 电子商务网站平台开发建设方案html居中代码
  • 效果好的网站建设公搜索引擎关键词的工具
  • 网站开发虚拟主机是什么网站下载免费软件安装
  • 想注册一个设计网站吗wordpress 链接添加
  • 做水果网站特点分析报告wordpress破解插件
  • 福建省交通建设质量安全监督局网站wordpress文章来源
  • 企业网站官网模板电影网站做静态是不是好一些
  • 椒江建设网站新吴区推荐做网站电话
  • 合肥最好的网站建设公司哪家好做一个网站 多少钱
  • 非交互式网站可以做商城吗如何做网站需求表格清单
  • wordpress下载安装是英文茂名网站建设优化
  • 公司注销后 网站备案吗济南市莱芜区都市网
  • 临沂网站设计公司网页美工设计基础
  • 推广注册app拿佣金平台网站推广优化淄博公司
  • 网站开发是做什么长沙公司建设网站
  • 网站建设的步骤过程如何用dw制作网页文字链接
  • 网站右键禁止中国苏州网
  • 有建设网站的软件吗wordpress文章标题总有网站名
  • 东莞建设网官方网站长沙做网站开发哪里好
  • 做网站需要招什么渠道网络是什么意思
  • 电商网站建设外包费用网站备案和域名备案一样吗
  • 凡科网站建设如何植入代码加盟培训网站建设
  • 网站建设的功能都需要有哪些方面中国建设银行下载