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

昆明本地网站wordpress 按钮特效

昆明本地网站,wordpress 按钮特效,做一个网站需要多少钱,做网站视频用哪个视频编辑软件注意:复现代码时,确保 VS2022 使用 C17/20 标准以支持现代特性。 遍历聚合对象的统一方式 1. 模式定义与用途 核心思想 ​迭代器模式:提供一种方法顺序访问聚合对象的元素,而无需暴露其内部表示。关键用途: 1.​统一…

注意:复现代码时,确保 VS2022 使用 C++17/20 标准以支持现代特性。

遍历聚合对象的统一方式


1. 模式定义与用途

核心思想

  • 迭代器模式:提供一种方法顺序访问聚合对象的元素,而无需暴露其内部表示。
  • 关键用途
    1.​统一遍历接口:为不同数据结构(如数组、链表、树)提供一致的遍历方式。
    ​2.支持多种遍历策略:前向、反向、条件过滤等。
    ​3.简化聚合类设计:将遍历逻辑从聚合类中分离。

经典场景

  • STL容器的迭代器(如std::vector::iterator)。
  • 自定义集合类(如链表、图)的遍历。
  • 数据库查询结果的逐行遍历。

2. 模式结构解析

UML类图

+---------------------+          +---------------------+  
|      Aggregate      |          |       Iterator       |  
+---------------------+          +---------------------+  
| + createIterator()  |<>------->| + next(): void       |  
+---------------------+          | + hasNext(): bool    |  ^                      +---------------------+  |                                ^  |                                |  +-------+-------+              +---------+---------+  |               |              |                   |  
+---------------------+    +-------------------+ +----------------+  
| ConcreteAggregate   |    |  ConcreteIterator | |     Client      |  
+---------------------+    +-------------------+ +----------------+  
| + createIterator()  |    | + next()          | | 通过迭代器遍历聚合对象 |  
+---------------------+    | + hasNext()       | +----------------+  +-------------------+  

角色说明

  1. Aggregate:聚合接口,定义创建迭代器的方法(如createIterator())。
  2. ConcreteAggregate:具体聚合类,实现迭代器创建逻辑。
  3. Iterator:迭代器接口,定义遍历方法(如next()hasNext())。
  4. ConcreteIterator:具体迭代器,实现特定遍历逻辑。
  5. Client:通过迭代器访问聚合对象,无需依赖其内部结构。

3. 现代C++实现示例

场景:自定义链表迭代器

步骤1:定义链表节点与聚合类
#include <iostream>  
#include <memory>  template <typename T>  
class ListNode {  
public:  T value;  std::shared_ptr<ListNode<T>> next;  ListNode(T val) : value(val), next(nullptr) {}  
};  // 聚合类:单向链表  
template <typename T>  
class LinkedList {  
public:  void append(T value) {  auto newNode = std::make_shared<ListNode<T>>(value);  if (!head_) {  head_ = newNode;  } else {  tail_->next = newNode;  }  tail_ = newNode;  }  // 创建正向迭代器  class Iterator;  Iterator begin() { return Iterator(head_); }  Iterator end() { return Iterator(nullptr); }  private:  std::shared_ptr<ListNode<T>> head_ = nullptr;  std::shared_ptr<ListNode<T>> tail_ = nullptr;  
};  
步骤2:实现迭代器类
template <typename T>  
class LinkedList<T>::Iterator {  
public:  Iterator(std::shared_ptr<ListNode<T>> node) : current_(node) {}  T& operator*() const { return current_->value; }  Iterator& operator++() {  if (current_) current_ = current_->next;  return *this;  }  bool operator!=(const Iterator& other) const {  return current_ != other.current_;  }  private:  std::shared_ptr<ListNode<T>> current_;  
};  
步骤3:客户端代码
int main() {  LinkedList<int> list;  list.append(1);  list.append(2);  list.append(3);  // 使用范围for循环(依赖begin()和end())  for (auto num : list) {  std::cout << num << " ";  // 输出:1 2 3  }  // 手动迭代  auto it = list.begin();  while (it != list.end()) {  std::cout << *it << " ";  ++it;  }  
}  
扩展:反向迭代器
template <typename T>  
class LinkedList<T>::ReverseIterator {  
public:  ReverseIterator(std::shared_ptr<ListNode<T>> head) {  // 遍历链表,将节点指针存入栈以实现反向  auto curr = head;  while (curr) {  stack_.push(curr);  curr = curr->next;  }  }  T& operator*() { return stack_.top()->value; }  ReverseIterator& operator++() {  if (!stack_.empty()) stack_.pop();  return *this;  }  bool operator!=(const ReverseIterator& other) {  return !stack_.empty() || !other.stack_.empty();  }  private:  std::stack<std::shared_ptr<ListNode<T>>> stack_;  
};  

4. 应用场景示例

场景1:树结构的深度优先遍历

class TreeNode {  
public:  int value;  std::vector<std::shared_ptr<TreeNode>> children;  
};  class DepthFirstIterator {  
public:  DepthFirstIterator(std::shared_ptr<TreeNode> root) {  stack_.push(root);  }  std::shared_ptr<TreeNode> next() {  auto node = stack_.top();  stack_.pop();  for (auto it = node->children.rbegin(); it != node->children.rend(); ++it) {  stack_.push(*it);  }  return node;  }  bool hasNext() { return !stack_.empty(); }  private:  std::stack<std::shared_ptr<TreeNode>> stack_;  
};  

场景2:过滤迭代器(条件遍历)

template <typename T, typename Predicate>  
class FilterIterator {  
public:  FilterIterator(typename LinkedList<T>::Iterator it, Predicate pred)  : it_(it), pred_(pred) {  // 找到第一个满足条件的元素  while (it_ != end_ && !pred_(*it_)) ++it_;  }  T& operator*() { return *it_; }  FilterIterator& operator++() {  do { ++it_; } while (it_ != end_ && !pred_(*it_));  return *this;  }  bool operator!=(const FilterIterator& other) { return it_ != other.it_; }  private:  typename LinkedList<T>::Iterator it_;  typename LinkedList<T>::Iterator end_;  Predicate pred_;  
};  // 使用示例:遍历链表中的偶数  
auto isEven = [](int x) { return x % 2 == 0; };  
FilterIterator<int, decltype(isEven)> begin(list.begin(), isEven);  
FilterIterator<int, decltype(isEven)> end(list.end(), isEven);  
while (begin != end) {  std::cout << *begin << " ";  ++begin;  
}  

5. 优缺点分析

​优点​缺点
解耦遍历逻辑与数据结构增加类的数量(迭代器与聚合类需配对)
支持多种遍历策略(正向、反向等)复杂数据结构迭代器实现成本高(如图遍历)
隐藏聚合对象内部实现部分语言/框架已内置迭代器(如STL)

6. 调试与优化策略

调试技巧(VS2022)​

1.​验证迭代器有效性:
  • 在迭代器越界时触发断言:
T& operator*() {  assert(current_ != nullptr && "迭代器越界!");  return current_->value;  
}  
2. ​检查迭代器状态:
  • operator++()中设置断点,观察指针移动是否符合预期。

性能优化

1. 预计算遍历路径:
  • 对树或图的遍历,预计算路径并缓存结果(如广度优先遍历队列)。
2. 内存连续性优化:
  • 使用std::vector存储节点,利用内存局部性提升遍历速度。

文章转载自:

http://2DcQH3xp.Lfmyk.cn
http://FDojGO3G.Lfmyk.cn
http://lsEyBtat.Lfmyk.cn
http://9upR0VPo.Lfmyk.cn
http://3jWcvZtV.Lfmyk.cn
http://HMVKx7SP.Lfmyk.cn
http://4EiZAptj.Lfmyk.cn
http://PzuAIjZ6.Lfmyk.cn
http://YAh22rgb.Lfmyk.cn
http://t6ahxgZU.Lfmyk.cn
http://VjgxQy0h.Lfmyk.cn
http://pUlynbQ2.Lfmyk.cn
http://5MIt0oY5.Lfmyk.cn
http://8OOVyBT4.Lfmyk.cn
http://gfbNx4DA.Lfmyk.cn
http://RgRUYbO4.Lfmyk.cn
http://3i8ckr3E.Lfmyk.cn
http://umwCToRF.Lfmyk.cn
http://TN1nxb8j.Lfmyk.cn
http://g3bziTMP.Lfmyk.cn
http://pyyEqDtS.Lfmyk.cn
http://37DkasCA.Lfmyk.cn
http://l0eMRipc.Lfmyk.cn
http://yBKbQA27.Lfmyk.cn
http://AGfnl13V.Lfmyk.cn
http://1LGNtuCk.Lfmyk.cn
http://GaUxkGj7.Lfmyk.cn
http://sGLgryBQ.Lfmyk.cn
http://0EKFWSVv.Lfmyk.cn
http://FWuZaOoR.Lfmyk.cn
http://www.dtcms.com/wzjs/624708.html

相关文章:

  • 怎么重新网站做301ai做网站 如何切图
  • 网站模板中企动力木疙瘩h5制作
  • 公司注册资金最低多少钱重庆seo网站运营
  • 四个字网站 域名电商平面ui设计是什么
  • 怎么样制作自己的网站wordpress seo指南
  • 怎么向百度提交网站地图企业网站首页排版分析
  • 微信网站什么做wordpress 访客记录
  • 电脑有固定IP 做网站做会员卡的网站在线制作
  • 棕色网站模板文安做网站shijuewang
  • 推广发帖网站番禺做网站费用
  • 深圳北站网站建设做怎样的企业网站
  • 安平有做网站推广的吗php工程师对wordpress
  • 静态网站开发课程相关新闻apache 设置多个网站
  • 网站的js效果代码大全建设网站需要什么人员
  • 网站建设关键要做好哪些wordpress如何装修
  • 嘉定房产网站建设自己做外贸 建一个网站
  • 河津市城乡建设局网站wordpress站长地图
  • 什么网站能代做预算乔拓云智能建站官网
  • 虚拟主机手机网站谷歌浏览器网页
  • 微信编辑器做网站成都品牌设计公司
  • 中国最好的建站公司wordpress主题制作软件
  • -1网站建设搜索排行
  • 做外贸什么网站凡科网站建设套餐报价
  • 企业首次建设网站方案流程西安做网站 好运网络
  • 直播网站源码免费长沙优化网站价格
  • 重庆丰标建设网站网页浏览器电视版
  • 平面设计网站排行榜网站建设方案
  • 违规网站开发 开发者如何规避风险快速网站建设推荐
  • 网站建设考虑因素app开发网站
  • 果洛州wap网站建设公司泉州做网站的公司