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

怎样做网站海报gis网站开发教程

怎样做网站海报,gis网站开发教程,51zwd一起做网店,wordpress加qq和微信插件下载1.先定义一个类对象vector 为了防止和库里面发生冲突#xff0c;定义一个命名空间#xff0c;将类对象放在命名空间 里面 #includeiostream using namespace std; namespace zjw {class vector {public:private:}; }2.定义变量#xff0c;需要一个迭代器#xff…1.先定义一个类对象vector 为了防止和库里面发生冲突定义一个命名空间将类对象放在命名空间 里面 #includeiostream using namespace std; namespace zjw {class vector {public:private:}; }2.定义变量需要一个迭代器为了便于修改变成任意类型的迭代器我们使用函数模版三个迭代器变量 _start用于指向顺序表的头_finish指向顺序表的结尾的下一位_end_of_storage保存总容量在初始化列表中先设置为空 #includeiostream using namespace std; namespace zjw {templateclass Tclass vector {public:typedef T * iterator;//迭代器类型vector():_start(nullptr), _finish(nullptr), _end_of_storage(nullptr){}private:iterator _start;iterator _finish;iterator _end_of_storage}; }3.定义函数 1.返回指向顺序表开始的迭代器函数 2.返回指向顺序表结尾的迭代器函数 3.返回容量大小的函数 4.返回顺序表元素多少 5.判断顺序表为空地的函数 5.一个运算符重载的函数返回给定下标下的值 #includeiostream using namespace std; namespace zjw {templateclass Tclass vector {public:typedef T * iterator;//迭代器类型vector():_start(nullptr), _finish(nullptr), _end_of_storage(nullptr){}iterator begin()//1{return _start;}iterator end()//2{return _finish;}size_t capacity()//3{return _end_of_storage - _start;}size_t size()//4{return _finish - _start;}bool empty()//5{return _finish _start;}T operator[](size_t pos)//6{assert(pos size());return _start[pos];}private:iterator _start;iterator _finish;iterator _end_of_storage;}; }4.reserve函数开空间 void reserve(size_t n){if (n capacity){T* tmp new T[n];if (_start){memcpy(tmp, _start, sizeof(T) * size());delete[] _start;}_start tmp;_finish _start size();_end_of_storage _start n;}}5.push_back函数尾插以及尾删函数 void push_back(const T x){if (_finish _end_of_storage){reserve(capacity() 0 ? 4 : capacity() * 2);}*_finish x;_finish;}void pop_back(){assert(!empty());--_finish;}6.测试尾插尾删下标遍历迭代器遍历范围for遍历以及运算符重载返回对应下标的元素 void test1(){vectorintv1;v1.push_back(1);v1.push_back(2);v1.push_back(3);v1.push_back(4);v1.push_back(5);for (int i 0; i v1.size(); i){cout v1[i] ;}cout endl;v1.pop_back();v1.pop_back();vectorint::iterator it v1.begin();while (it ! v1.end()){cout *it ;it;}cout endl;v1.pop_back();for (auto e : v1){cout e ;}cout endl;}这里开空间的函数会发生问题 7.修改扩容函数 void reserve(size_t n){if (n capacity){ int szsize();T* tmp new T[n];if (_start){memcpy(tmp, _start, sizeof(T) * size());delete[] _start;}_start tmp;_finish _start sz;_end_of_storage _start n;}}8.resize函数 参数小于容量大小相当于缩容参数大于容量大小相当于扩容超过_finish的用值初始化 在讲resize之前看看模版会不会给匿名变量初始化内置类型是否能初始化. template class Tvoid f(){T x T();cout x endl;}void test3(){fint();fint*();fdouble();}发现可以所以我们在resize里面当ncapacity(),我们可以把顺序表外的用来初始化自定义类型相当于调用自己的构造函数内置函数我们在这假装理解为调用自己的构造函数. void resize(size_t n, T val T()){if (n size()){_finish _start n;}else{if (n capacity())reserve(n);while (_finish ! _start n){*_finish val;_finish;}}}9.测试resize void test2(){vectorintv1;v1.push_back(1);v1.push_back(2);v1.push_back(3);v1.push_back(4);v1.push_back(5);cout v1.size() endl;cout v1.capacity() endl;v1.resize(10);cout v1.size() endl;cout v1.capacity() endl;for (auto e : v1){cout e ;}cout endl;v1.resize(3);for (auto e : v1){cout e ;}}}10.封装一个打印函数用于任何vector对象 void func(const vectorint v){for (int i 0; i v.size(); i)//下标{cout v[i] ;}cout endl;vectorint::iterator it v.begin();//迭代器while (it ! v.end()){cout *it ;it;}cout endl;for (auto e : v)//范围for{cout e ;}cout endl;}因为打印不同对象的元素为了区分是有一个this指针的但是参数是const 无法产生this指针 解决方法在这些函数后面加 const ,如果是const对象调用的话就是权限平移如果是非const的话是权限缩小都可以调用了如果要限制别人去修改这个*it,我们可以定义一个const的迭代器 void func(const vectorint v){for (int i 0; i v.size(); i)//下标{cout v[i] ;}cout endl;vectorint::iterator it v.begin();//迭代器while (it ! v.end()){cout *it ;it;}cout endl;for (auto e : v)//范围for{cout e ;}cout endl;}void test4(){vectorintv1;v1.push_back(1);v1.push_back(2);v1.push_back(3);v1.push_back(4);v1.push_back(5);func(v1);}11.insert函数实现 void insert(iterator pos, const T val){assert(pos _start);assert(pos _finish);if (_finish _end_of_storage){reserve(capacity() 0 ? 4 : capacity() * 2);}iterator end _finish - 1;while (end pos){*(end 1) *end;--end;}*pos val;_finish;}测试insert void test5(){vectorintv1;v1.push_back(1);v1.push_back(2);v1.push_back(3);v1.push_back(4);v1.push_back(5);for (auto e : v1)//范围for{cout e ;}cout endl;auto pos find(v1.begin(), v1.end(), 3);//找到3的位置if (pos ! v1.end()){v1.insert(pos, 30);//3前插入30}for (auto e : v1)//范围for{cout e ;}cout endl;(*pos);//让31for (auto e : v1)//范围for{cout e ;}cout endl;}}pos保存的之前是3的地址如果在3前插入一个30pos所指向的位置就变成了30*pos,就变成了31 如果我们不使用push_back5的话 void test5(){vectorintv1;v1.push_back(1);v1.push_back(2);v1.push_back(3);v1.push_back(4);//v1.push_back(5);for (auto e : v1)//范围for{cout e ;}cout endl;auto pos find(v1.begin(), v1.end(), 3);//找到3的位置if (pos ! v1.end()){v1.insert(pos, 30);//3前插入30}for (auto e : v1)//范围for{cout e ;}cout endl;(*pos);//让31for (auto e : v1)//范围for{cout e ;}cout endl;}}会出现报错到底是怎么一回事 如何修改 我们需要在未扩容前记录好pos距离_start的位置拷到新空间他与新_start也保持这个距离更新pos void insert(iterator pos, const T val){assert(pos _start);assert(pos _finish);if (_finish _end_of_storage){int lenpos - _start;reserve(capacity() 0 ? 4 : capacity() * 2);pos _start len;}iterator end _finish - 1;while (end pos){*(end 1) *end;--end;}*pos val;_finish;}这里的*pos里面的数据被清理如果不清理应该是3应该是4我们可以注释掉reserve中的delete看看 这里的问题被叫做迭代器失效 12.earse函数 void eraase(iterator pos){assert(pos _start);assert(pos _finish);iterator start pos 1;while (start ! _finish){*(start - 1) *start;start;}--_finish;}earse函数测试 void test6(){vectorintv1;v1.push_back(1);v1.push_back(2);v1.push_back(3);v1.push_back(4);for (auto e : v1)//范围for{cout e ;}cout endl;auto pos find(v1.begin(), v1.end(), 2);if (pos ! v1.end()){v1.erase(pos);//删除2}(*pos);2位置上的元素for (auto e : v1)//范围for{cout e ;}}这里2删除后2的地址上存的就是3然后给3在std中这个也算迭代器失效由于这里是自己写的所以没报错. void test6(){std::vectorintv1;v1.push_back(1);v1.push_back(2);v1.push_back(3);v1.push_back(4);for (auto e : v1)//范围for{cout e ;}cout endl;auto pos find(v1.begin(), v1.end(), 2);if (pos ! v1.end()){v1.erase(pos);}(*pos);for (auto e : v1)//范围for{cout e ;}}}上面会调用vector里面的函数 在不同编译器下有不同的处理情况。在vs中std我们认为迭代器失效如果删除的是4的话以我们实现的earse后–_finish ;4那里的值没有被清理所以后面的*pos也不会出错但在vs中我们使用vector里面的实现认为迭代器失效. 我们可以将代码拷过去在linux下试一下g是怎么回事 在g中使用库中的vector函数删除数据4没有报错对于迭代器失效不同编译器也有不同处理. 13.整体代码 #includeiostream #includeassert.h #includevector using namespace std; namespace zjw {templateclass Tclass vector {public:typedef T * iterator;//迭代器类型typedef T* const_iterator;//迭代器类型vector():_start(nullptr), _finish(nullptr), _end_of_storage(nullptr){}iterator begin()const {return _start;}iterator end() const{return _finish;}size_t capacity(){return _end_of_storage - _start;}size_t size() const{return _finish - _start;}bool empty(){return _finish _start;}T operator[](size_t pos) const{assert(pos size());return _start[pos];}void reserve(size_t n){int sz size();if (n capacity()){T* tmp new T[n];if (_start){memcpy(tmp, _start, sizeof(T) * size());delete[] _start;}_start tmp;_finish _start sz;_end_of_storage _start n;}}void push_back(const T x){if (_finish _end_of_storage){reserve(capacity() 0 ? 4 : capacity() * 2);}*_finish x;_finish;}void pop_back(){assert(!empty());--_finish;}void resize(size_t n, T val T()){if (n size()){_finish _start n;}else{if (n capacity())reserve(n);while (_finish ! _start n){*_finish val;_finish;}}}void insert(iterator pos, const T val){assert(pos _start);assert(pos _finish);if (_finish _end_of_storage){int lenpos - _start;reserve(capacity() 0 ? 4 : capacity() * 2);pos _start len;}iterator end _finish - 1;while (end pos){*(end 1) *end;--end;}*pos val;_finish;}void erase(iterator pos){assert(pos _start);assert(pos _finish);iterator start pos 1;while (start ! _finish){*(start - 1) *start;start;}--_finish;}private:iterator _start;iterator _finish;iterator _end_of_storage;};void test1(){vectorintv1;v1.push_back(1);v1.push_back(2);v1.push_back(3);v1.push_back(4);v1.push_back(5);for (int i 0; i v1.size(); i){cout v1[i] ;}cout endl;v1.pop_back();v1.pop_back();vectorint::const_iterator it v1.begin();while (it ! v1.end()){cout *it ;it;}cout endl;v1.pop_back();for (auto e : v1){cout e ;}cout endl;}void test2(){vectorintv1;v1.push_back(1);v1.push_back(2);v1.push_back(3);v1.push_back(4);v1.push_back(5);cout v1.size() endl;cout v1.capacity() endl;v1.resize(10);cout v1.size() endl;cout v1.capacity() endl;for (auto e : v1){cout e ;}cout endl;v1.resize(3);for (auto e : v1){cout e ;}}void func(const vectorint v){for (int i 0; i v.size(); i)//下标{cout v[i] ;}cout endl;vectorint::iterator it v.begin();//迭代器while (it ! v.end()){cout *it ;it;}cout endl;for (auto e : v)//范围for{cout e ;}cout endl;}void test4(){vectorintv1;v1.push_back(1);v1.push_back(2);v1.push_back(3);v1.push_back(4);v1.push_back(5);func(v1);}void test5(){vectorintv1;v1.push_back(1);v1.push_back(2);v1.push_back(3);v1.push_back(4);// v1.push_back(5);for (auto e : v1)//范围for{cout e ;}cout endl;auto pos find(v1.begin(), v1.end(), 3);//找到3的位置if (pos ! v1.end()){v1.insert(pos, 30);//3前插入30}for (auto e : v1)//范围for{cout e ;}cout endl;(*pos);//让31cout *pos endl;for (auto e : v1)//范围for{cout e ;}cout endl;}void test6(){std:: vectorintv1;v1.push_back(1);v1.push_back(2);v1.push_back(3);v1.push_back(4);for (auto e : v1)//范围for{cout e ;}cout endl;auto pos find(v1.begin(), v1.end(), 4);if (pos ! v1.end()){v1.erase(pos);}(*pos);for (auto e : v1)//范围for{cout e ;}}}int main() {// zjw::test1();zjw::test6();// zjw::test3(); }
http://www.sczhlp.com/news/168449/

相关文章:

  • 新手如何做服装网站怎么做网页连接
  • 南京市高淳区城乡建设局网站南京建设工程网站
  • 商务网站建设兴田德润电话多少迁西个人网页设计制作软件
  • flash源文件网站wordpress托管套餐
  • 购物网站如何做推广关键词优化顾问
  • seo综合查询站长工具关键词wordpress 相亲主题
  • 网站开发 去哪里找页面韩雪冬网站
  • 有电脑网站怎么做手机网站网站上做扫一扫
  • 重庆网站建设公司 菠拿拿oppo手机网站建设策划方案
  • 傻瓜式 建网站沈阳关键词seo
  • 基于php做的网站下载做后期从哪个网站选音乐
  • 移动公司营销网站设计wordpress_广告主题
  • 天津专业制作网站用dw做的网站生成链接吗
  • ic交易网站建设重庆相亲网
  • 个人做网站费用北京网站建设推荐华网天下
  • 如何网站建设目标外贸建站推广哪家好
  • 网站建设电话销售技巧wordpress推介联盟
  • 网站开发团队 人员郑州企业
  • 建设企业网站的公司wordpress数字证书登录
  • 采购网站官网网站制作软件排名
  • 网站排行网站主体备案号
  • 高平做网站wordpress页面模板选项
  • 河北网站搜索排名优化方案wordpress页面标题字号
  • 服务器网站建设情况荣县规划和建设局网站
  • 做餐饮连锁加盟如何选网站推广网站建设有哪些家
  • 龙华网站的建设郑州响应式网站制作
  • 直接用apk 做登陆网站wordpress 判断语句
  • rar在线解压缩网站产品设计个人作品集
  • 做美食直播哪个网站最好权威的唐山网站建设
  • 论坛做视频网站云服务器的作用