说明:以下代码源自vs2019
1. 本质是数组
/*源码*/
template <class _Ty, size_t _Size> //模板,
class array {
....
_Ty _Elems[_Size]; //本质是数组,数组大小固定为Size;
};
2. 一些接口
(a) void fill(const _Ty& _Value);
/*源码*/
fill_n(_Elems, _Size, _Value);//将数组中所有元素值均用_Value代替;
(b) void swap(array& _Other);
array<string, 5> arr = {"I","Love","Liu","xiao","Li"};
array<string, 5> arr1 = {"12","23","34"};
arr1.swap(arr); //要求arr1和arr的大小相等,否则语法错; 即size=5一样,值可以不一样;
for (size_t i = 0; i < arr.size(); i++) {
cout << arr[i].c_str() << endl; //12 23 34
}
(c) _Ty* _Unchecked_begin();
/*源码*/
{
return _Elems; //返回数组名; 也是首元素地址;
}
(d) _Ty* _Unchecked_end() noexcept
/*源码*/
{
return _Elems + _Size; //返回数组最后一个位置
}
测试:
array<string, 5> arr = {"I","Love","Liu","xiao","Li"};
cout << &arr.at(0) << endl; //006FFE08
cout << arr._Unchecked_begin() << endl;//006FFE08
cout << &arr.at(4) << endl; //0093F854
cout << arr._Unchecked_end() << endl; //0093F870
&arr.at(4)与arr._Unchecked_end()相差12;恰好是字符串"Li"的长度;
(e) size_type size() 和 size_type max_size() ;
/*源码*/
{
return _Size; //两者均返回元素个数;
}