旅游目的地门户网站如何建设黄金网站app视频下载小说
2026/4/18 16:30:32 网站建设 项目流程
旅游目的地门户网站如何建设,黄金网站app视频下载小说,dw做网站导航条,wordpress模板命名规则设计模式[16]——迭代器模式#xff08;Iterator#xff09;一分钟彻底说透#xff08;C版软件领域真实例子#xff09; 一句话定义 提供一种方法顺序访问一个聚合对象中的各个元素#xff0c;而不暴露其内部表示#xff0c;让遍历和容器完全解耦。 最狠的比喻#x…设计模式[16]——迭代器模式Iterator一分钟彻底说透C版·软件领域真实例子一句话定义提供一种方法顺序访问一个聚合对象中的各个元素而不暴露其内部表示让遍历和容器完全解耦。最狠的比喻软件人专属STL容器遍历vectorintvec{1,2,3,4};for(autoitvec.begin();it!vec.end();it){cout*it;}// 或者 C11: for (auto x : vec)客户端完全不知道vector内部是连续数组还是list是链表还是set是红黑树——迭代器隐藏了一切细节为什么需要它坏味道瞬间爆炸不用迭代器你会这样写// 对vectorfor(size_t i0;ivec.size();i)coutvec[i];// 对listfor(autonodelist.head;node;nodenode-next)coutnode-data;// 对自定义容器客户端每次换容器都得重写遍历代码寄和之前模式彻底分清10秒表项目命令Command解释器Interpreter迭代器Iterator核心意图操作封装成对象解释语法树统一遍历不同容器关键操作execute()/undo()interpret()递归it / *it / it ! end()关注点行为封装语法执行访问顺序不暴露内部结构典型场景撤销重做规则引擎/表达式STL容器、树遍历、数据库游标口号“命令即对象”“语法树里走一遭”“换容器不换遍历代码”真实软件例子统一遍历不同容器自定义STL#includeiostream#includevector#includelist#includememoryusingnamespacestd;// 1. 迭代器接口C标准风格templatetypenameTclassIterator{public:virtual~Iterator()default;virtualboolhasNext()const0;virtualTnext()0;};// 2. 具体容器动态数组templatetypenameTclassVectorContainer{vectorTdata;public:voidadd(constTitem){data.push_back(item);}classVecIterator:publicIteratorT{typenamevectorT::iterator it,end;// 注意C11可以用autopublic:VecIterator(typenamevectorT::iterator begin,typenamevectorT::iterator e):it(begin),end(e){}boolhasNext()constoverride{returnit!end;}Tnext()override{return*it;}};unique_ptrIteratorTcreateIterator(){returnmake_uniqueVecIterator(data.begin(),data.end());}};// 3. 具体容器链表templatetypenameTclassListContainer{listTdata;public:voidadd(constTitem){data.push_back(item);}classListIterator:publicIteratorT{typenamelistT::iterator it,end;public:ListIterator(typenamelistT::iterator begin,typenamelistT::iterator e):it(begin),end(e){}boolhasNext()constoverride{returnit!end;}Tnext()override{return*it;}};unique_ptrIteratorTcreateIterator(){returnmake_uniqueListIterator(data.begin(),data.end());}};客户端统一遍历代码换容器无感intmain(){VectorContainerstringvecCont;vecCont.add(Alice);vecCont.add(Bob);vecCont.add(Charlie);ListContainerstringlistCont;listCont.add(Dave);listCont.add(Eve);listCont.add(Frank);// 统一遍历函数客户端代码完全相同autoprintAll[](autocontainer){autoitercontainer.createIterator();while(iter-hasNext()){coutiter-next() ;}coutendl;};cout遍历Vector容器: ;printAll(vecCont);// Alice Bob Charliecout遍历List容器: ;printAll(listCont);// Dave Eve Frank// 明天换set、map、自定义树客户端一行代码不动}输出遍历Vector容器: Alice Bob Charlie 遍历List容器: Dave Eve FrankC 真实项目里无处不在STL全家桶vector::iterator、list::iterator、map::iterator、set::iterator范围for循环本质就是begin()/end()迭代器数据库游标ResultSet的next()遍历行树/图遍历前序/中序/后序迭代器非递归版Boost.Iterator各种高级迭代器适配器现代C更爽写法C20for(constautoitem:container){...}// 自动调用begin/end// 自定义容器只需重载begin()和end()即可支持范围for终极口诀STL使用者专属“容器千千万遍历只一行迭代器统一内部随便藏”刻在DNA里的一句话当你有“多种不同结构的容器”却希望客户端用完全统一的代码遍历时立刻上迭代器模式——提供begin/hasNext/next换底层实现客户端无感现在迭代器模式STL的灵魂彻底说透了

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询