c++11的 std::array 的一个小例子
/**
* clang++ index1.cpp -std=c++11
*
* c代码里有 int a[4] 这样的内置数组,在c++中增加了
* std::array 类,是对这样内置数组类型的增强版。
* 但是又和 std::vector不同. std::array 在声明的
* 时候需要给定类型和大小,声明后不支持大小的改变。
*/
# include <iostream>
# include <array>
int main(int argc, char const *argv[])
{
/**
* 可以直接用{}表达式来直接初始化
*/
std::array<int, 3> a0 = {1, 2, 3};
/**
* 可以用具有已有的std::array 来初始化
*/
std::array<int, 3> a1 = a0;
/**
* array不可以用变量指定
* 下面两行代码编译的时会报错
int m = 5;
int b[m]; //正确,内置数组
*/
/**
* 下面两行编译也会错误的
const int m =5
int b[m];
*/
/**
* 但是下面两行代码能够编译成功
*/
constexpr int m = 3;
int b[m];
/**
* 代码的代码也无法编译通过,因为b是一个内置数组
std::array<int, 3> a4 = b; //错误,array不可以用数组指定
*/
/**
* 这个是可以的编译成功的
*/
std::array<int, 3> a2;
a2 = a0;
/**
* m 是 int 或者const int 下面的一行都无法编译通过,
* 但是 m 是一个constexpr int , 下面是可以成功编译的
*/
std::array<int, m> a3;
/**
* a2 是一个std::array, 下面的给a4赋值也是可以编译的
*/
std::array<int,3> a4 = a2;
/**
* a2 是一个std::array, 下面以a2为参数的构造函数也是可以的。
*/
std::array<int,3> a5(a2);
std::cout<<"顺序输出"<<std::endl;
for(auto it = a5.begin(); it != a5.end(); it++){
std::cout<< *it << std::endl;
}
std::cout<<"逆序输出"<<std::endl;
for(auto it = a5.rbegin(); it != a5.rend(); it++){
std::cout<< *it << std::endl;
}
return 0;
}