数组 C++ 中的大括号初始化

Brace initialization in arrays c++

我想知道如何将值初始化为数组的某些元素,例如。

int arr[5]={3,5,6};

3的索引为0,5的索引为2
所以索引 1 被编译器跳过并自动赋值!

感谢您的帮助!

in a way that the index of 3 is 0 and 5 is 2.

那就是

int arr[5] = {3,0,5,6};

So index 1 is skipped and automatically assigned value by compiler!

你不能跳过中间的元素,只能在最后,就像你的

int arr[5] = {3,5,6};

其中最后缺失的元素用0初始化。

请注意,您想要的在 C 中是可能的。来自 cppreference 的示例:

int n[5] = {[4]=5,[0]=1,2,3,4} // holds 1,2,3,4,5

然而,这在标准 C++ 中是不可能的(现在?)。

PS:如果你不关心可移植性(实际上你应该关心)你可以研究你的编译器手册,看看它是否也允许 c 风格的初始化在 C++ 中。

I want to know how to intialize values to some elements of array ... So index 1 is skipped

这是不可能的。只能按顺序为元素提供初始化器;他们不能被跳过。您可以做的是将数组初始化为零,然后分配一些元素。示例:

int arr[5]{};
arr[0] = 3;
arr[2] = 5;

或者,您可以改用默认初始化:

int arr[5];
arr[0] = 3;
arr[2] = 5;

在这种情况下,元素在分配之前将具有不确定的值。永远不要读取不确定的值;它没有用,通常会导致未定义的行为。