2011-11-13 3 views
1

Comment naviguer dans un tableau multidimensionnel? Disons que nous avions quelque chose comme ceci:En boucle dans un tableau multidimensionnel?

class blah 
{ 
    public: 
    blah(); 
    bool foo; 
}; 

blah::blah() 
{ 
    foo = true; 
} 

blah testArray[1][2]; 
testArray[1][0].foo = false; 

Comment pourrais-je aller sur une boucle à travers testArray pour trouver un des foo est faux?

+1

façon même boucle vous par tout autre tableau, à l'exception du corps de la boucle sera une autre boucle – Robert

+1

'TestArray [1] [0 ] 'est hors de portée pour votre tableau déclaré –

+0

C'est un pseudo-code. Peu importe. Vous pouvez même voler en pseudocode. – Lemmons

Répondre

5
class blah 
{ 
    public: 
    blah(); 
    bool foo; 
}; 

blah::blah() 
{ 
    foo = true; 
} 

int testArrayFirstLength = 1; 
int testArraySecondLength = 2; 

blah testArray[testArrayFirstLength][testArraySecondLength]; 
testArray[1][0].foo = false; 


for (int i = 0; i < testArrayFirstLength; i++) { 
    for (int j = 0; j < testArraySecondLength; j++) { 
     if (!testArray[i][j]) { 
      blah thing = testArray[i][j] 
     } 
    } 
} 

C'est bon? Ou cherchiez-vous quelque chose d'autre?

+0

Ouais ça fonctionne. Merci! – Lemmons

0
int x = 0; 
int y = 0; 

for(x = 0; x < 1; x++){ 
    for(y = 0; y < 2; y++){ 
     if(testArray[x][y].foo == false){ 
      //yeah! 
     } 
    } 
} 
0
for (std::size_t i(0); i != 1; ++i){ 
    for (std::size_t j(0); j != 2; ++j) { 
     if (!testArray[i][j].foo) { 
      //testArray[i][j].foo is false 
      //Perform the required operation 
     } 
    } 
} 
4

Celui-ci ne dépend pas de nombres magiques:

#include <cstddef> 
for (size_t x = 0; x < sizeof(*testArray)/sizeof(**testArray); ++x) 
for (size_t y = 0; y < sizeof(testArray)/sizeof(*testArray); ++y) { 
    if (testArray[x][y].foo == false) { 

    } 
} 

Avoir x dans la boucle externe conduit à une meilleure mise en cache.

+1

+1 ... mais peut-être ajouter '#include ' et 'using std :: size_t'? C'est une bête noire. Que faire si (pas probable, et pas dans la question) les lignes ne sont pas toutes de la même longueur? –

+0

@ keith.layne Je vais ajouter l'en-tête, mais le 'std' n'est pas nécessaire. Les types de tableaux peuvent-ils être définis avec des lignes différentes? – Pubby

+0

Je me sens stupide maintenant, je ne savais pas qu'il était déclaré dans l'espace de noms global. Je vérifie votre question. –

0

testé dans C++ +14 (en utilisant des pointeurs, donc être sûr)

#include <iostream> 
int main() 
{ 
int array[2][2][2]; 
int* pointer=&array[0][0][0]; 
for(int i=0; i<2*2*2; i++) 
    { 
     std::cout<<*pointer<<std::endl;  
     pointer++; 
    } 
} 
Questions connexes