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::arraystd::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] = {
        {" - ", "| |", "   ", "| |", " - "},
        {" - ", "| |", "   ", "| |", " - "}
    };

注意:考虑。缩进是一个强大的工具,但它可能会被滥用。