2

我已經創建了一個稱爲數字的二維數組,並且想要逐個初始化每個子數組,以使我的代碼更加清晰。據我所知,下面的代碼工作:C++試圖初始化二維數組中的值

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::arraystd::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; 
} 
1

如果您要改變這條線爲清楚起見,還要考慮:

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

注:考慮。縮進是一個強大的工具,但可能會被濫用。