我的角度可能有点奇怪。
C++ 标准库工具需要定义这些嵌套类型,一定程度上是由于当初设计 STL 时( 1994 年开始)没有 decltype
,从而泛型代码需要依赖显式写出来的嵌套类型名。
本来
size_type
,只需要拿 size
函数的返回类型;iterator
,只需要拿 begin
函数的返回类型;不过 difference_type
对于不能相减(一般是非随机访问)的迭代器还是有意义的。
至于 int
或 unsigned
为什么有时不适合,可以参考别人的回答。
其实有个恰当的比喻解释这个,就好像问以前99平的房子是二房,为什么现在会有人把99平的房子做成三房,买大点不行吗?
答案:因为大了,比较费钱。