MyTinySTL之iterator.h


#include <cstddef>

#include "type_traits.h"

namespace mystl
{
	//五种迭代器类型
	struct input_iterator_tag {};
	struct output_iterator_tag {};
	struct forward_iterator_tag : public input_iterator_tag {};
	struct bidirectional_iterator_tag : public forward_iterator_tag {};
	struct random_access_iterator_tag : public bidirectional_iterator_tag {};


	//iterator 模板
	template <class Category, class T, class Distance = ptrdiff_t,
		class Pointer = T * , class Reference = T & >
		struct iterator
	{
		typedef Category		iterator_category;
		typedef T				value_type;
		typedef Pointer			pointer;
		typedef Reference		reference;
		typedef Distance		distance;
	};
...
}

知识点

  1. cstddef
    头文件cstddef对应的是stddef.h c++版本,定义了常用的常量、宏、类型和函数
    内的各项定义
    NULL : 指针值用来表示未定义或无值
    nullptr_t : nullptr的类型
    size_t :一种无正负号类型,用来表示大小(比如元素的个数)
    ptrdiff_t :一种带正负号类型,用来表示指针之间的距离
    max_align_t:所有环境之最大齐位所对应的类型
    offsetof(type,mem):表示成员mem在某个struct或union中的偏移量

  2. iterator
    参考stl中源码编写
    主要是萃取iterator 特性,五种迭代器的distance,forword

在代码内部可以看出可以看出++i和i++的区别

self& operator++()
		{
			--current;
			return *this;
		}

		self& operator++(int)
		{
			self tmp = *this;
			--current;
			return tmp;
		}

++i可以作为左值,因为返回的是是一个引用。i++在是实现上使用了++i,但返回的是自增一个值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值