【问题标题】:c++ trying to initialize values in 2d arrayc ++试图初始化二维数组中的值
【发布时间】:2017-03-08 05:34:56
【问题描述】:

我创建了一个名为 digits 的二维数组,并希望一个一个地初始化每个子数组以使我的代码更清晰。我了解以下代码有效:

string digits[2][5] = { { " - ","| |","   ","| |"," - " },{ " - ","| |","   ","| |"," - " } };

但我想知道为什么以下不起作用:

string digits[2][5];
digits[0] = { " - ","| |","   ","| |"," - " };
digits[1] = { " - ", "| |", "   ", "| |", " - " };

【问题讨论】:

  • 这是作业。初始化列表仅用于初始化。

标签: c++ arrays initialization variable-assignment list-initialization


【解决方案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不能整体赋值。

数组类型的对象不能作为一个整体进行修改:即使它们 是左值(例如可以获取数组的地址),它们不能 出现在赋值运算符的左侧

您可以使用 std::array 或 std::vector 执行此操作,它们可以使用花括号初始化器进行分配。

std::array<std::array<std::string, 5>, 2> digits;
digits[0] = { " - ","| |","   ","| |"," - " };
digits[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;
    }
    

    【讨论】:

      【解决方案3】:

      如果您为了清楚起见要更改此行,还请考虑:

      string digits[2][5] = {
              {" - ", "| |", "   ", "| |", " - "},
              {" - ", "| |", "   ", "| |", " - "}
          };
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-02
        • 1970-01-01
        • 2011-09-29
        • 2011-12-26
        • 1970-01-01
        • 2012-11-29
        相关资源
        最近更新 更多