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
    No fields configured for issues without a type.

    Projects

    Status

    Backlog

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions