Skip to content

chapter2: Iterator #24

@FrozenLemonTee

Description

@FrozenLemonTee

参考代码要求

  1. 新建目录src/chapter2/iterator,目录下新建iterator.cppm
  2. iterator.cppm中命名模块为mySTL.iterator并导出,同时在全局模块中导入后再导出
  3. iterator.cppm中添加mySTL::iterator命名空间并导出,在其中实现以下概念:
  • Iterator:
    • 重载了operator*(解引用)运算符
    • 重载了operator==(相等)运算符
  • ForwardIterator :
    • 满足Iterator概念
    • 重载了operator++(自增)运算符
  • BidirectionalIterator:
    • 满足ForwardIterator概念
    • 重载了operator--(自减)运算符
  • RandomAccessIterator:
    • 满足BidirectionalIterator概念
    • 重载了与一个有符号整型(默认为std::ptrdiff_t)的operator+/operator-(二元加法/减法)运算符,返回一个新位置的迭代器
    • 重载了与相同类型对象的operator-(二元减法)运算符,返回一个有符号整型(默认为std::ptrdiff_t)表示两者的距离
    • 重载了与一个有符号整型(默认为std::ptrdiff_t)的operator+=/operator-=(二元复合加法/减法)运算符,返回自身的引用
    • 重载了与一个有符号整型(默认为std::ptrdiff_t)的operator[](下标)运算符,返回对应位置元素的引用,需要同时重载常量左值引用版本和左值引用版本
    • 重载了与相同类型对象的operator<=>(三向比较)运算符,返回一个三向比较结果的对象表示两个迭代器逻辑位置上的先后关系
  • ContiguousIterator:
    • 满足RandomAccessIterator概念
    • 通过operator*获取的元素引用,对其取地址,所获取的地址与迭代器对象本身的地址一致

测试代码要求

基础部分

1.测试指针类型T*和常量指针类型const T*是否自动满足以上所有概念

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    Status

    In progress

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions