是否可以从初始化列表中分配给数组?
Is it possible to assign to an array from an initializer list?
我正在尝试使从 C++ 中的初始值设定项列表分配给数组成为可能,如果可能的话该怎么做?可能新版本的C++需要实现吗?
代码:
#include <iostream>
#include <array>
using namespace std;
int main()
{
int arrayName_A[5];
arrayName_A = {1,2,3,4,5};
for (int i=0;i<5;i++)
{
cout << "\n Starting checker" << '\n';
cout << "checked: " << arrayName_A[i] << '\n';
}
}
数组一声明就需要初始化,像这样:
#include <iostream>
#include <array>
using namespace std;
int main()
{
int arrayName_A[5] = {1,2,3,4,5};
for (int i=0;i<5;i++)
{
cout << "\n Starting checker" << '\n';
cout << "checked: " << arrayName_A[i] << '\n';
cout << "\n Starting checker" << '\n';
cout << "checked: " << arrayName_A[i] << '\n';
cout << "\n Starting checker" << '\n';
cout << "checked: " << arrayName_A[i] << '\n';
cout << "\n Starting checker" << '\n';
cout << "checked: " << arrayName_A[i] << '\n';
cout << "\n Starting checker" << '\n';
cout << "checked: " << arrayName_A[i] << '\n';
}
}
不,这不可能。您要么必须直接初始化数组:
int arrayName_A[5] = {1,2,3,4,5};
或改用std::array
:
std::array<int, 5> arrayName_A;
arrayName_A = {1, 2, 3, 4, 5};
数组没有赋值运算符。数组是不可修改的左值。
也就是说你可能不会写例如
int a[3] = { 1, 2, 3 };
int b[3] = a;
或
int a[3] = { 1, 2, 3 };
int b[3];
b = a;
您可以使用基于范围的 for 循环使用初始化列表中的值设置数组的每个元素,如下面的演示程序所示。
#include <iostream>
int main()
{
int arrayName_A[5];
size_t i = 0;
for ( const auto &item : { 1, 2, 3, 4, 5 } ) arrayName_A[i++] = item;
for ( const auto &item : arrayName_A ) std::cout << item << ' ';
std::cout << '\n';
return 0;
}
程序输出为
1 2 3 4 5
否则使用具有赋值运算符的标准class std::array
。例如
#include <iostream>
#include <array>
int main()
{
std::array<int, 5> arrayName_A;
arrayName_A = { 1, 2, 3, 4, 5 };
// or
arrayName_A = { { 1, 2, 3, 4, 5 } };
for ( const auto &item : arrayName_A ) std::cout << item << ' ';
std::cout << '\n';
return 0;
}
程序输出与上图相同,即
1 2 3 4 5
我正在尝试使从 C++ 中的初始值设定项列表分配给数组成为可能,如果可能的话该怎么做?可能新版本的C++需要实现吗?
代码:
#include <iostream>
#include <array>
using namespace std;
int main()
{
int arrayName_A[5];
arrayName_A = {1,2,3,4,5};
for (int i=0;i<5;i++)
{
cout << "\n Starting checker" << '\n';
cout << "checked: " << arrayName_A[i] << '\n';
}
}
数组一声明就需要初始化,像这样:
#include <iostream>
#include <array>
using namespace std;
int main()
{
int arrayName_A[5] = {1,2,3,4,5};
for (int i=0;i<5;i++)
{
cout << "\n Starting checker" << '\n';
cout << "checked: " << arrayName_A[i] << '\n';
cout << "\n Starting checker" << '\n';
cout << "checked: " << arrayName_A[i] << '\n';
cout << "\n Starting checker" << '\n';
cout << "checked: " << arrayName_A[i] << '\n';
cout << "\n Starting checker" << '\n';
cout << "checked: " << arrayName_A[i] << '\n';
cout << "\n Starting checker" << '\n';
cout << "checked: " << arrayName_A[i] << '\n';
}
}
不,这不可能。您要么必须直接初始化数组:
int arrayName_A[5] = {1,2,3,4,5};
或改用std::array
:
std::array<int, 5> arrayName_A;
arrayName_A = {1, 2, 3, 4, 5};
数组没有赋值运算符。数组是不可修改的左值。
也就是说你可能不会写例如
int a[3] = { 1, 2, 3 };
int b[3] = a;
或
int a[3] = { 1, 2, 3 };
int b[3];
b = a;
您可以使用基于范围的 for 循环使用初始化列表中的值设置数组的每个元素,如下面的演示程序所示。
#include <iostream>
int main()
{
int arrayName_A[5];
size_t i = 0;
for ( const auto &item : { 1, 2, 3, 4, 5 } ) arrayName_A[i++] = item;
for ( const auto &item : arrayName_A ) std::cout << item << ' ';
std::cout << '\n';
return 0;
}
程序输出为
1 2 3 4 5
否则使用具有赋值运算符的标准class std::array
。例如
#include <iostream>
#include <array>
int main()
{
std::array<int, 5> arrayName_A;
arrayName_A = { 1, 2, 3, 4, 5 };
// or
arrayName_A = { { 1, 2, 3, 4, 5 } };
for ( const auto &item : arrayName_A ) std::cout << item << ' ';
std::cout << '\n';
return 0;
}
程序输出与上图相同,即
1 2 3 4 5