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