C++如何快速初始化std::array数组?

2020年9月19日更新: 这个问题貌似是无解的,因为memset的原理是修改内存,而普通数组的储存方式正是直接通过内存储存。但array是一个模板—…
关注者
43
被浏览
118,451

15 个回答

直接用花括号初始化,几维都行,memset是C语言遗毒,不要用。

std::array<std::array<int, 100>, 100> c{};

整个二维数组都会被初始化为零, 详细你可以搜索value initialization。

首先memset不是初始化。是赋值。

先讲初始化:

std::array<int, 100> b; // default initialize array -> default intialize int -> indefinite
std::array<int, 100> b{}; // value inititilize array -> value intialize int -> zero initialize int -> 0

再讲赋值:

b = {}; // set to zero
b.fill(100); // set to 100

再讲二维数组:

简单来说就是误以为 c 二维数组和 c++ std array of array 是一回事。

既然知道 std::array 是一个模板,那么 std::array<std::array<int, 100>> 只是凑巧内部也是一个 std::array of int, 所以看起来外层 std::array 知道怎么赋值内部内容物,其实并不然。