Skip to content

chapter3: Range #25

@FrozenLemonTee

Description

@FrozenLemonTee

参考代码要求

  1. 新建目录src/chapter2/range,目录下新建range.cppm
  2. range.cppm中命名模块为mySTL.range并导出,同时在全局模块中导入后再导出
  3. range.cppm中添加mySTL::range命名空间并导出
  4. range.cppmmySTL::range命名空间中添加针对普通数组和常量数组的begin/end自由函数重载:
  • begin:参数有T (&arr) [Size]*const T (&arr) [Size]*的版本,返回数组第一个元素的指针
  • end:参数有T (&arr) [Size]*const T (&arr) [Size]*的版本,返回数组最后一个元素的地址的下一个地址的指针
  1. range.cppmmySTL::range命名空间中添加Range概念。要求至少满足以下两点中的一点:
  • 对象有成员方法beginend,并且begin方法返回类型满足iterator::Iterator概念
  • 对象有自由函数beginend的重载,并且begin函数返回类型满足iterator::Iterator概念
  1. range.cppmmySTL::range命名空间中添加IterRange概念。要求至少满足以下两点中的一点:
  • 对象满足 Range概念,并且对象类型的退化类型(去除cv限定符、去除引用、函数对应函数指针,数组对应指向数组首地址的指针)的对象的begin成员方法的返回类型与end成员方法的返回类型一致
  • 对象满足 Range概念,并且对象类型的退化类型(去除cv限定符、去除引用、函数对应函数指针,数组对应指向数组首地址的指针)的对象的begin自由函数重载的返回类型与end函数的返回类型一致
  1. Array中添加成员方法beginend,分为常量引用和非常量引用的版本

测试代码要求

基础部分

  1. 测试普通数组和常量数组符合RangeIterRange概念,能正确通过beginend接口获取迭代器
  2. 测试Array符合RangeIterRange概念,能正确通过beginend接口获取迭代器
  3. 测试Array能够支持ranged-for循环

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    Status

    Backlog

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions