这个迭代器的模板类型定义如下:


以一
以一 2023-12-31 03:37:43 54139 赞同 0 反对 0
分类: 资源
// Iterator class template- it's a forward iterator template class Numeric_Iterator : public std::iterator < std::forward_iterator_tag, T > {


这个迭代器的模板类型定义如下:

  1. // Iterator class template- it's a forward iterator
  2. template<typename T>
  3. class Numeric_Iterator : public std::iterator < std::forward_iterator_tag, T >
  4. {
  5. friend class Numeric_Range < T >;
  6. protected:
  7. Numeric_Range<T>& range; // Reference to the range for this iterator
  8. T value; // Value pointed to
  9. public:
  10. explicit Numeric_Iterator(Numeric_Range<T>& a_range) : range {a_range}, value {a_range.start} {};
  11.  
  12. // Assignment operator
  13. Numeric_Iterator& operator=(const Numeric_Iterator& src)
  14. {
  15. range = src.range;
  16. value = src.value;
  17. }
  18.  
  19. // Dereference an iterator
  20. T& operator*()
  21. {
  22. // When the value is one step more than the last, it's an end iterator
  23. if (value == static_cast<T>(range.start + range.count*range.step))
  24. {
  25. throw std::logic_error("Cannot dereference an end iterator.");
  26. }
  27. return value;
  28. }
  29.  
  30. // Prefix increment operator
  31. Numeric_Iterator& operator++()
  32. {
  33. // When the value is one step more than the last, it's an end iterator
  34. if (value == static_cast<T>(range.start + range.count*range.step))
  35. {
  36. throw std::logic_error("Cannot increment an end iterator.");
  37. }
  38. value += range.step; // Increment the value by the range step
  39. return *this;
  40. }
  41.  
  42. // Postfix increment operator
  43. Numeric_Iterator operator++(int)
  44. {
  45. // When the value is one step more than the last, it's an end iterator
  46. if (value == static_cast<T>(range.start + range.count*range.step))
  47. {
  48. throw std::logic_error("Cannot increment an end iterator.");
  49. }
  50. auto temp = *this;
  51. value += range.step; // Increment the value by the range step
  52. return temp; // The iterator before it's incremented
  53. }
  54.  
  55. // Comparisons
  56. bool operator<(const Numeric_Iterator& iter) const { return value < iter.value; }
  57. bool operator==(const Numeric_Iterator& iter) const { return value == iter.value; }
  58. bool operator!=(const Numeric_Iterator& iter) const { return value != iter.value; }
  59. bool operator>(const Numeric_Iterator& iter) const { return value > iter.value; }
  60. bool operator<=(const Numeric_Iterator& iter) const { *this < iter || *this == iter; }
  61. bool operator>=(const Numeric_Iterator& iter) const { *this > iter || *this == iter; }
  62. };
  63. #endif

代码看起来虽多,却很简单直白。这个迭代器有一个成员变量,它保存了一个和它相关联的 Numeric_Range 对象的引用,另外还保存了它所指向元素的值。迭代器的构造函数的参数是一个 Numeric_Range 对象的引用。构造函数用参数初始化成员变量 range,并将成员变量 value 的值设为 Numeric_Range 的 start。

还定义了一些解引用运算符、前缀或后缀自增运算符以及一套比较运算符。对元素段的结束迭代器的解引用或自增都是非法的,因此如果操作数是结束迭代器,那么自增运算符函数和解引用运算符函数都会拋出异常;这表明成员变量 value 超出了元素段中的最后一个值。为了简单,选择拋出一个标准异常。

如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!

评价 0 条
以一L0
粉丝 0 资源 1143 + 关注 私信
最近热门资源
银河麒麟桌面操作系统备份用户数据  123
统信桌面专业版【全盘安装UOS系统】介绍  116
银河麒麟桌面操作系统安装佳能打印机驱动方法  108
银河麒麟桌面操作系统 V10-SP1用户密码修改  101
最近下载排行榜
银河麒麟桌面操作系统备份用户数据 0
统信桌面专业版【全盘安装UOS系统】介绍 0
银河麒麟桌面操作系统安装佳能打印机驱动方法 0
银河麒麟桌面操作系统 V10-SP1用户密码修改 0
作者收入月榜
1

prtyaa 收益393.62元

2

zlj141319 收益217.85元

3

1843880570 收益214.2元

4

IT-feng 收益208.98元

5

风晓 收益208.24元

6

777 收益172.71元

7

Fhawking 收益106.6元

8

信创来了 收益105.84元

9

克里斯蒂亚诺诺 收益91.08元

10

技术-小陈 收益79.5元

请使用微信扫码

加入交流群

请使用微信扫一扫!