2017-07-14 8 views
3

Verwendung Ich verwende nur einen einfachen Code, das Auto verwendet:das Auto-Schlüsselwort in C++

double **PArrays = new double*[3]; 

count = 0; 
for(auto Array: PArrays) 
    { 
     Array = new double[6]; 
     for(int i{}; i < 6; i++) 
     { 
      if(count == 0) 
      { 

       Array[i] = i; 
       std::cout<<"The value of Array i is: "<<Array[i]<<std::endl; 
       std::cout<<"The value of PArray is: "<<PArrays[count][i]; 
      } 
      else if(count == 1) 
      { 
       Array[i] = i * i; 
      } 
      else 
      { 
       Array[i] = i * i * i;    
      } 
     } 
     count += 1; 
    } 

ich die Werte in dem pArray [i] [j] nicht herausfinden kann, warum, da [ i] [j] liegen innerhalb der Grenzen, ergibt den Wert Null.

Darüber hinaus beschwert sich der Compiler, es heißt, dass "begin" nicht im Gültigkeitsbereich deklariert wurde und dann auf Array-Auto-Variable in der for-Schleife verweist, auch auf die gleiche Variable, die "end" deklariert, wurde nicht deklariert. :

for(auto Array: PArrays) 
    { 
     for(auto x: Array) 
     { 
      std::cout<<"The value is: "<<x; 
     } 
     std::cout<<std::endl; 
    } 
+7

'Auto Array: PArrays' Dies macht eine Kopie, wahrscheinlich wollen Sie' Auto & Array'. Vorgeschlagene Betrachtung: [CppCon 2014: Scott Meyers "Art Abzug und warum Sie sich interessieren"] (https://www.youtube.com/watch?v=wQxj20X-tIU) – Borgleader

+1

Was ist die Erklärung von 'PArrays'? – aschepler

+0

Nicht sicher, dass Sie sich auf "int i {}" verlassen können, um es auf allen Plattformen auf 0 zu initialisieren – IlBeldus

Antwort

8

for(auto Array: PArrays) gibt Ihnen einen Wert Kopie jedes Element in PArrays. Alle Änderungen, die Sie in Array vornehmen, werden nicht im ursprünglichen Container PArrays angezeigt.

Wenn Sie Array wollen ein Bezug auf sein auf ein Element von PArrays, dann verwenden

for(auto& Array: PArrays)

statt.

+0

Dies setzt voraus, dass 'PArrays' eine Sammlung von Zeigern (möglicherweise Smartpointern) ist. Es wird nicht unbedingt die zweite Menge von Schleifen in der ursprünglichen Post-Kompilierung unterstützen - ein 'double *' zum Beispiel hat kein definiertes 'end()'. – Peter

+0

@Bathsheba, ist es wahr, dass wir den Bereich für Schleife für Elemente auf dem Haufen nicht verwenden können? – mathmaniage

+0

@BeshalJaenal: Nein, das ist nicht wahr. – Bathsheba