stl_list.h的back( )函数是这样的:
reference back( )
{
return *(--end());
}
iterator end()
{
return node;
}
其中reference定义为:
typedef T value_type;
typedef value_type& reference;
一开始我的疑问是:
既然end是--的,那么每调用一次back,node便都向前移动一个节点,那岂不是每次back()的返回结果都不一样了?
后来发现,我的错误出在了在对end()函数的理解。
end()函数返回node,node的类型是link_type,然后初始化一个iterator类型的匿名变量iterator( node ),初始化这个变量时,会调用
struct _list_iterator这个结构体的构造函数:_list_iterator(link_type x): node(x) { }.即此时,已经将node值赋给了_list_iterator中的node.
所以--end()减的是struct _list_iterator中的那个node,而并非是class list中的那个node.