2

J'ai créé un tableau 2d appelé chiffres et j'aimerais initialiser chacune des sous-matrices une par une pour rendre mon code plus clair. Je comprends que le code suivant fonctionne:C++ essayer d'initialiser des valeurs dans un tableau 2d

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

Mais me demande pourquoi ce qui suit ne fonctionne pas:

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

C'est son devoir. Initialiser la liste est seulement pour l'initialisation. –

Répondre

2

Le 2ème est l'initialisation pas, il est l'affectation (des éléments de digits).

string digits[2][5];        // initialization 
digits[0] = { " - ","| |"," ","| |"," - " };  // assignment of the 1st element of digits 
digits[1] = { " - ", "| |", " ", "| |", " - " }; // assignment of the 2nd element of digits 

L'élément de digits est un tableau, la première array ne peut être affecté dans son ensemble.

objets de type tableau ne peuvent pas être modifiés dans son ensemble: même si elles sont lvalues ​​(par exemple une adresse de réseau peut être pris), ils ne peuvent pas apparaître sur le côté gauche d'un opérateur d'affectation

Vous pouvez le faire avec std::array ou std::vector, qui peut être affecté avec l'initialiseur contreventé.

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

L'initialisation est très différente de l'affectation. l'initialisation assigne une valeur à la variable lors de la déclaration (invoquant le constructeur) alors que l'affectation est à déclarer puis assign (invocation de l'opérateur d'affectation). pour attribuer correctement supprimer les crochets et que vous utilisez une boucle ou manuellement, par exemple:

#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

Si vous changez cette ligne pour plus de clarté, pensez aussi:

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

Note: Tenez compte. L'indentation est un outil puissant, mais il peut être mal utilisé.