我创建了一个名为digits的二维数组,并希望逐个初始化每个子数组,以使我的代码更清晰。我理解以下代码有效:
string digits[2][5] = { { " - ","| |"," ","| |"," - " },{ " - ","| |"," ","| |"," - " } };
但我想知道为什么以下不起作用:
string digits[2][5];
digits[0] = { " - ","| |"," ","| |"," - " };
digits[1] = { " - ", "| |", " ", "| |", " - " };
答案 0 :(得分:2)
第二个不是初始化,它是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不能作为一个整体分配。
数组类型的对象不能整体修改:即使它们 是左值(例如,可以采用数组的地址),它们不能 出现在赋值运算符的左侧
您可以使用std::array
或std::vector
执行此操作,可以使用支持的初始化程序进行分配。
std::array<std::array<std::string, 5>, 2> digits;
digits[0] = { " - ","| |"," ","| |"," - " };
digits[1] = { " - ", "| |", " ", "| |", " - " };
答案 1 :(得分:2)
初始化与赋值有很大不同。初始化是在声明(调用构造函数)时为变量赋值,而赋值则是声明然后赋值(调用赋值运算符)。 要正确分配你删除括号,然后你使用循环或手动,例如:
#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;
}
答案 2 :(得分:1)
如果您为了清晰起见而更改此行,请考虑:
string digits[2][5] = {
{" - ", "| |", " ", "| |", " - "},
{" - ", "| |", " ", "| |", " - "}
};
注意:考虑。缩进是一种强大的工具,但它可能被滥用。