c ++尝试初始化二维数组中的值
c++ trying to initialize values in 2d array
我已经创建了一个名为 digits 的二维数组,并且想一个一个地初始化每个子数组以使我的代码更清晰。我了解以下代码有效:
string digits[2][5] = { { " - ","| |"," ","| |"," - " },{ " - ","| |"," ","| |"," - " } };
但我想知道为什么以下内容不起作用:
string digits[2][5];
digits[0] = { " - ","| |"," ","| |"," - " };
digits[1] = { " - ", "| |", " ", "| |", " - " };
第二个不是初始化,它是赋值(digits
的元素)。
string digits[2][5]; // initialization
digits[0] = { " - ","| |"," ","| |"," - " }; // assignment of the 1st element of digits
digits[1] = { " - ", "| |", " ", "| |", " - " }; // assignment of the 2nd element of digits
digits
的元素是数组,原始的array不能整体赋值
Objects of array type cannot be modified as a whole: even though they
are lvalues (e.g. an address of array can be taken), they cannot
appear on the left hand side of an assignment operator
您可以使用 std::array
或 std::vector
来执行此操作,它们可以使用花括号初始化程序进行分配。
std::array<std::array<std::string, 5>, 2> digits;
digits[0] = { " - ","| |"," ","| |"," - " };
digits[1] = { " - ", "| |", " ", "| |", " - " };
初始化与赋值有很大不同。初始化是在声明(调用构造函数)时为变量赋值,而赋值是声明然后赋值(调用赋值运算符)。
要正确分配,请删除括号,然后使用循环或手动,例如:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s[2][3];
string Hi = "Hi there!";
s[0][0] = "Hello there!";
//....
for(int i(0); i < 2; i++)
for(int j(0); j < 3; j++)
s[i][j] = Hi;
for(int i(0); i < 2; i++)
for(int j(0); j < 3; j++)
cout << s[i][j] << endl;
return 0;
}
如果您为了清楚起见而更改此行,还请考虑:
string digits[2][5] = {
{" - ", "| |", " ", "| |", " - "},
{" - ", "| |", " ", "| |", " - "}
};
注意:考虑。缩进是一个强大的工具,但它可能会被滥用。
我已经创建了一个名为 digits 的二维数组,并且想一个一个地初始化每个子数组以使我的代码更清晰。我了解以下代码有效:
string digits[2][5] = { { " - ","| |"," ","| |"," - " },{ " - ","| |"," ","| |"," - " } };
但我想知道为什么以下内容不起作用:
string digits[2][5];
digits[0] = { " - ","| |"," ","| |"," - " };
digits[1] = { " - ", "| |", " ", "| |", " - " };
第二个不是初始化,它是赋值(digits
的元素)。
string digits[2][5]; // initialization
digits[0] = { " - ","| |"," ","| |"," - " }; // assignment of the 1st element of digits
digits[1] = { " - ", "| |", " ", "| |", " - " }; // assignment of the 2nd element of digits
digits
的元素是数组,原始的array不能整体赋值
Objects of array type cannot be modified as a whole: even though they are lvalues (e.g. an address of array can be taken), they cannot appear on the left hand side of an assignment operator
您可以使用 std::array
或 std::vector
来执行此操作,它们可以使用花括号初始化程序进行分配。
std::array<std::array<std::string, 5>, 2> digits;
digits[0] = { " - ","| |"," ","| |"," - " };
digits[1] = { " - ", "| |", " ", "| |", " - " };
初始化与赋值有很大不同。初始化是在声明(调用构造函数)时为变量赋值,而赋值是声明然后赋值(调用赋值运算符)。 要正确分配,请删除括号,然后使用循环或手动,例如:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s[2][3];
string Hi = "Hi there!";
s[0][0] = "Hello there!";
//....
for(int i(0); i < 2; i++)
for(int j(0); j < 3; j++)
s[i][j] = Hi;
for(int i(0); i < 2; i++)
for(int j(0); j < 3; j++)
cout << s[i][j] << endl;
return 0;
}
如果您为了清楚起见而更改此行,还请考虑:
string digits[2][5] = {
{" - ", "| |", " ", "| |", " - "},
{" - ", "| |", " ", "| |", " - "}
};
注意:考虑。缩进是一个强大的工具,但它可能会被滥用。