array是一个数组容器, 与vector相比,它的元素个数是固定. 以下是我测试array时写的代码. 具体看我代码. #include <iostream> #include <array> using namespace std; template <class T> class Write { T m; public: Write() : m(0) { } void operator()(T& x) { x = m++; } }; template <class T> class Read { public: void operator()(T& x) { cout << x << endl; } }; void Line() { for (int i=0; i<70; i++) cout << "-"; cout << endl; } template <class T> void ShowAll(T& obj) { for_each(obj.begin(), obj.end(), Read<int>()); } template <class T> void InitAll(T& obj) { for_each(obj.begin(), obj.end(), Write<int>()); } template <class T> void WriteLine(T val) { cout << val << endl; } void WriteLine(int* ptr) { printf ("0x%p/n", ptr); } void WriteLine(tr1::_Array_iterator<int,5> iter) { printf ("0x%p/n" , iter._Ptr); } void Test() { WriteLine("tr1中新增的容器的用法示例: 编译器VS2008+sp1, MSC++ 15.00.30729.01"); Line(); WriteLine("array<T>用法示例 "); WriteLine("构造: array<类型, 元素个数> arr"); tr1::array<int, 5> arr; WriteLine("assign方法: 对array中所有元素赋值, 用法arr.assign(10);"); arr.assign(10); ShowAll(arr); WriteLine("at方法: 返回第N个元素, 用法: arr.at(0) = -1; arr.at(4) = 99;"); arr.at(0) = -1; arr.at(4) = 99; ShowAll(arr); WriteLine("front方法: 返回第一个元素的值, 用法: arr.front()"); WriteLine(arr.front()); WriteLine("back方法: 返回最后一个元素的值, 用法: arr.back()"); WriteLine(arr.back()); WriteLine("begin方法: 返回第一个元素的地址, 用法: arr.begin()"); WriteLine(arr.begin()); WriteLine("data方法: 返回首地址, 用法: arr.data()"); WriteLine(arr.data()); WriteLine("end方法: 返回最后一个元素的后一个地址, 用法: arr.end()"); WriteLine(arr.end()); WriteLine("empty方法: 返回是否为空, 用法: arr.empty()"); WriteLine(arr.empty()); WriteLine("max_size方法: 返回最多能存储的元素个数, 用法: arr.max_size()"); WriteLine(arr.max_size()); WriteLine("操作符[]: 同at方法, 用法: arr[0] = -2; arr[4] = 98;"); arr[0] = -2; arr[4] = 98; ShowAll(arr); WriteLine("size方法: 返回当前存储的元素个数, 用法: arr.size()"); WriteLine(arr.size()); WriteLine("swap方法: 交换两个同类型的array, 用法: arr.swap(arr2);"); tr1::array<int, 5> arr2; arr2.assign(9); arr.swap(arr2); WriteLine("ShowAll(arr); "); ShowAll(arr); WriteLine("ShowAll(arr2); "); ShowAll(arr2); WriteLine("array还有两个方法: rbegin和rend, 返回的是一个逆向迭代器, "); WriteLine("用法同begin和end, 只不过它是倒着来的 "); for (tr1::array<int,5>::reverse_iterator i=arr2.rbegin(); i!=arr2.rend(); ++i) { WriteLine(*i); } Line(); WriteLine("异常测试: 用一个超出数组界限的下标来测试"); WriteLine("经过测试, 发现使用at方法会抛出错误, "); WriteLine("而[]操作符在内部使用一个断言, 在编译时直接提示错误"); //WriteLine(arr2[100]); WriteLine(arr2.at(100)); } void main() { try { Test(); } catch (exception e) { cout << e.what() << endl; } }