欢迎光临散文网 会员登陆 & 注册

c++11的 std::array 的一个小例子

2023-05-13 17:12 作者:卢朓  | 我要投稿

/**
 * 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;
}


c++11的 std::array 的一个小例子的评论 (共 条)

分享到微博请遵守国家法律