C++ STL和泛型编程(二)---- array 和 forward_list
因为将array设计成容器后,便可以利用上一些如迭代器、仿函数、算法等部件,可操作性强。
一、array
- TR1版本:
template<typename _Tp, std::size_t _Nm>
struct array{
typedef _Tp value_type;
typedef _Tp* pointer;
typedef value_type* iterator;
// 当array容器长度为0时,则默认赋值为array[1]
value_type _M_instance[_Nm ? _Nm : 1];
iterator begin(){
return iterator(&_M_instance[0]); // 返回的是native pointer型的指针迭代器
}
iterator end(){
return iterator(&_M_instance[_Nm]);
}
};
必须指定容器的大小!
- G4.9版本:
由图知,array类里有变量为_M_elems,而其是AT_Type::_Type类型,
往上看知道AT_Type又是_GLIBCXX_STD_C::__array_traits<_Tp, _Nm>类的别名。
因而找到__array_traits类,发现其定义了_Type[_Nm]为_Tp类型,因而 _AT_Type::_Type _M_elems实际上相当于 _Tp _M_elems[_Nm]。【相当于如下的声明定义形式】
typedef int T[100];
T c;