c++ - 二维 std::array 上的初始化列表

标签 c++ c++11

为什么int的二维数组会连续初始化?同时对每组数字初始化二维 vector 。

int main()
{
  array<array<int, 2>, 2> td{ 2, 6, 4, 8 }; //array of arrays
  for (int i = 0; i < 2; ++i)
    for(int j = 0; j < 2; ++j)
      cout << td[i][j] << ' ';

  cout << endl;

  vector<vector<int>> vtd{ { 5, 1 }, { 0, 2 } };  //vector of vectors
  for (int i = 0; i < 2; ++i)
    for (int j = 0; j < 2; ++j)
      cout << vtd[i][j] << ' ';

  return 0;
}

结果如下:

2 6 4 8
5 1 0 2

最佳答案

std::array 是一个集合。当用这样的花括号初始化列表初始化聚合时,每个子聚合按顺序从列表中获取所需数量的元素,列表的其余部分用于初始化下一个元素,依此类推。特别是,这意味着 td 中的第一个数组采用前两个初始化器(因为它有两个元素),第二个数组采用其余两个。

std::vector 不是聚合,并且有一个显式定义的构造函数,该构造函数将 std::initializer_list 作为参数,它决定了列表初始化的语义.

关于c++ - 二维 std::array 上的初始化列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21944003/

相关文章:

c++ - c++11 新功能,正确使用 shared_ptr?

c++ - 热处理 c++11 lambda,同时捕获此指针并指定调用约定

c++ - c++11参数包可以在模板外使用吗?

c++ - 实现接口(interface)的类的析构函数在引用为接口(interface)时未调用

c++ - 将 d3d11 包含到代码块

c++ - 执行 CUDA 程序时出现段错误

c++ - 'new' 和 'delete' 在 C++ 中被弃用了吗?

c++ - exp10 不同于 pow(10)

c++ - 如何在 Visual Studio 2010 中捕获 cl.exe 命令行?

C++11 正则表达式匹配中的匹配