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

免费个人网站服务器化妆品网站设计方案

免费个人网站服务器,化妆品网站设计方案,查域名的网址,零基础建网站文章目录 1、自定义String实现iterator2、自定义vector实现iterator3、迭代器失效问题 迭代器的功能#xff1a;提供一种统一的方式#xff0c;来透明的遍历容器。 迭代器可以透明的访问容器内部的元素的值#xff0c;而无需了解其底层遍历机制具体是数组的下标还是链表的指… 文章目录 1、自定义String实现iterator2、自定义vector实现iterator3、迭代器失效问题 迭代器的功能提供一种统一的方式来透明的遍历容器。 迭代器可以透明的访问容器内部的元素的值而无需了解其底层遍历机制具体是数组的下标还是链表的指针等等。 泛型算法参数接收的都是迭代器 泛型算法 - 全局的函数 - 给所有容器用的 泛型算法有一套方式能够统一的遍历所有的容器的元素 - 迭代器 1、自定义String实现iterator #include iostream #pragma warning(disable:4996)using namespace std;class String { public:String(const char *p nullptr) {if (p ! nullptr) {_pstr new char[strlen(p) 1];strcpy(_pstr, p);}else {_pstr new char[1];_pstr[0] \0;}}~String() {delete[] _pstr;_pstr nullptr;}String(const String str) {_pstr new char[strlen(str._pstr) 1];strcpy(_pstr, str._pstr);}String operator(const String str) {if (this str) return *this;delete[] _pstr;_pstr new char[strlen(str._pstr) 1];strcpy(_pstr, str._pstr);return *this;}bool operator(const String str) const {return strcmp(_pstr, str._pstr) 0;}bool operator(const String str) const {return strcmp(_pstr, str._pstr) 0;}bool operator(const String str) const {return strcmp(_pstr, str._pstr) 0;}int length() const { return strlen(_pstr); }const char *c_str() const { return _pstr; }//char chstr6[6]; str6[6]7char operator[](int index) { return _pstr[index]; }//char chstr6[6]; 不允许修改! str6[6]7const char operator[](int index) const { return _pstr[index]; }// 给string字符串类型提供迭代器的实现class iterator {public:iterator(char *p nullptr) : _p(p){}bool operator!(const iterator it) {return _p ! it._p;}void operator() {_p;}char operator*() {return *_p;}private:char *_p;};// begin返回的是容器底层首元素的迭代器的表示iterator begin() { return iterator(_pstr); }// end返回的是容器末尾元素后继位置的迭代器的表示iterator end() { return iterator(_pstr length()); }private:char *_pstr;friend String operator(const String lhs, const String rhs);friend ostream operator(ostream out, const String str); };String operator(const String lhs, const String rhs) {//char *ptmp new char[strlen(lhs._pstr) strlen(rhs._pstr) 1];//strcpy(ptmp, lhs._pstr);//strcat(ptmp, rhs._pstr);//return String(ptmp); // 内存泄漏ptmp 未释放//char *ptmp new char[strlen(lhs._pstr) strlen(rhs._pstr) 1];//strcpy(ptmp, lhs._pstr);//strcat(ptmp, rhs._pstr);//String tmp(ptmp); // 效率太低//delete[] ptmp; //return tmp;String result;delete[] result._pstr; // 释放默认构造的空字符串内存result._pstr new char[strlen(lhs._pstr) strlen(rhs._pstr) 1];strcpy(result._pstr, lhs._pstr);strcat(result._pstr, rhs._pstr);return result; }ostream operator(ostream out, const String str) {out str._pstr;return out; }int main() {String str1 hello world!;// 容器的迭代器类型String::iterator it str1.begin();for (; it ! str1.end(); it) {cout *it ;}cout endl;// C11 foreach的方式来遍历容器的内部元素的值 底层还是通过迭代器进行for (auto s : str1) {cout s ;}cout endl;return 0; }2、自定义vector实现iterator #include iostream using namespace std;templatetypename T class vector { public:vector(int size 10) {_first new T[size];_last _first;_end _first size;}~vector() {delete[]_first;_first _last _end nullptr;}vector(const vectorT rhs) {int size rhs._end - rhs - _first;_first new T[size];int len rhs._last - rhs._first;for (int i 0; i len; i) {_first[i] rhs._first[i];}_last _first len;_end _first size;}vectorT operator(const vectorT rhs) {if (this rhs) {return *this;}delete[]_first;int size rhs._end - rhs - _first;_first new T[size];int len rhs._last - rhs._first;for (int i 0; i len; i) {_first[i] rhs._first[i];}_last _first len;_end _first size;return *this;}void push_back(const T val) {if (full()) {expand();}*_last val;}void pop_back() {if (empty()) {return;}--_last;}T back() {// 返回容器末尾元素的值return *(_last - 1);}bool full() const { return _last _end; }bool empty() const { return _last _first; }int size() const { return _end - _first; }T operator[](int index) { // vec[2]if (index 0 || index size()) {throw OutOfRangeException;}return _first[index];}//迭代器一般实现成容器的嵌套类型class iterator {public:iterator(T *ptr nullptr) : _ptr(ptr){}bool operator!(const iterator it) const {return _ptr ! it._ptr;}void operator() {_ptr;}T operator*() {return *_ptr;}private:T *_ptr;};// 需要给容器提供begin和end方法iterator begin() { return iterator(_first); }iterator end() { return iterator(_last); }private:T *_first; // 指向数组空间的起始位置T *_last;// 指向数组中有效元素的后继位置T *_end;// 指向数组空间的后继位置void expand() {int size _end - _first;T *ptmp new T[size * 2];for (int i 0; i size; i) {ptmp[i] _first[i];}delete[] _first;_first ptmp;_last _first size;_end _last size;} };class Test { public:Test() { cout Test() endl; }~Test() { cout ~Test() endl; } };int main() {vectorint vec;for (int i 0; i 20; i) {vec.push_back(rand() % 100);}for (int i 0; i vec.size(); i) {cout vec[i] ;}cout endl;//vectorint::iterator it vec.begin();auto it vec.begin();for (; it ! vec.end(); it) {cout *it ;}cout endl;for (auto v : vec) {cout v ;}cout endl;return 0; }3、迭代器失效问题 问题引入 vectorint vec;for (int i 0; i 20; i) {vec.push_back(rand() % 100);}// 把vec容器中所有的偶数全部删除auto it vec.begin();for (; it ! vec.end(); it) {if (*it % 2 0) {//迭代器失效的问题第一次调用erase以后迭代器it就失效了vec.erase(it); // insert(it,val) erase(it)break;}}//给vec容器中所有的偶数前面添加一个小于偶数值1的数字auto it vec.begin();for (; it ! vec.end(); it) {if (*it % 2 0) {// 这里的迭代器在第一次insert之后iterator就失效了vec.insert(it, *it - 1);break;}} 迭代器为什么会失效? a. 当容器调用erase方法后当前位置到容器末尾元素的所有的迭代器全部失效了。 b. 当容器调用insert方法后当前位置到容器末尾元素的所有的迭代器全部失效了。     首元素- 插入点/删除点迭代器依然有效     插入点/删除点-末尾元素迭代器全部失效 c. insert来说如果引起容器内存扩容。     首元素- 插入点/删除点 -末尾元素原来容器的所有的迭代器就全部失效了 迭代器失效了以后问题该怎么解决? 对插入/删除点的迭代器进行更新操作。 vectorint vec;for (int i 0; i 20; i) {vec.push_back(rand() % 100);}for (auto v : vec) {cout v ;}cout endl;// 把vec容器中所有的偶数全部删除auto it vec.begin();while (it ! vec.end()) {if (*it % 2 0) {//迭代器失效的问题第一次调用erase以后迭代器it就失效了it vec.erase(it); // insert(it,val) erase(it)}else {it;}}for (auto v : vec) {cout v ;}cout endl;//给vec容器中所有的偶数前面添加一个小于偶数值1的数字auto it vec.begin();for (; it ! vec.end(); it) {if (*it % 2 0) {// 这里的迭代器在第-次insert之后iterator就失效了it vec.insert(it, *it - 1);//break;it;}} for (auto v : vec) {cout v ;}cout endl;
http://www.zqtcl.cn/news/52950/

相关文章:

  • 做网站哪里的服务器速度快崇左网站建设
  • 选择锦州网站建设上海嘉定网站建设
  • 做响应式网站用什么框架公司后台网站怎么做
  • 网站建设怎么宣传做网站 网络映射
  • 新乡网站优化公司推荐网站开发和室内制作
  • 沙坪坝网站开发网络界面设计
  • 哪里找需要网站建设的wordpress分享文章插件
  • 门头沟做网站山西seo排名
  • 东莞集团网站建设规定百度推广按效果付费是多少钱
  • 河南中恒诚信建设有限公司网站广州app开发公司排名
  • 专业建设专题网站地产公司网站建设
  • 中国建设协会网站首页茶叶电子商务网站开发技术支持
  • 如何做一份企业网站安卓app开发实例教程
  • 辽宁鞍山网站建设公司wordpress搭建本地博客
  • 电影网站建设视频教程网站建设代理加盟
  • 如何把jQuery特效做网站背景宽城网站制作
  • 网站为什么具有网络营销价值首都开发公司
  • 太原谁家网站做的好重庆建筑人员证书查询
  • 梅河口网站建设网站开发收获
  • 无锡网站维护网站建设上传视频教程
  • 不想用原来的网站模板了就用小偷工具采集了一个可是怎么替换百度seo效果
  • saas建站 彩页wordpress火车头采集图片
  • 上海网站群建设中国义乌网
  • 网站建设基础实训报告天元建设集团有限公司设计研究院赵纪峰联系方式
  • 推广网站的网址和网鱼相匹配企业网站的建设与维护
  • 静海区网站建设推广东莞网站设计电话
  • 晋江网站制作做网站去什么公司好
  • 唐山专业网站建设公司郑州网站建设方案服务公司
  • 网站加入百度地图seo基本步骤顺序
  • 怎么查询网站开发公司河南快速网站备案