2017-08-21 14 views
-4

Ich möchte ein 2D-Array ohne eine anfängliche Größe deklarieren. Es hält auf mich einen Fehler geben:ein Array dynamisch zuweisen

Error C2078: too many initializes.

habe ich versucht, dynamisch mein Array zuweisen, aber nichts funktionierte, so weit ich mit der dynamischen Zuordnung nicht allzu vertraut bin. Meine Frage ist, ob es eine Möglichkeit gibt, ein Array ohne Anfangsgröße zu deklarieren, und wenn ja, was ist der effizienteste Weg?

+2

_ "was der effizienteste Weg ist, es zu tun?" _ Verwenden Sie einen [ 'std :: VECTOR'] (http://en.cppreference.com/w/cpp/container/vector). – user0042

+2

Bitte fügen Sie den Code ein, den Sie bisher versucht haben. – brownKnight

+0

Versuchen Sie, 'Vektoren' zu suchen. Sie können einen benutzerdefinierten selbst erstellen, falls erforderlich. – JustinJmnz

Antwort

1

my question is If there is a possible way to declare an Array without an initial size and if so what is the most efficient way to do it ?

Sicher, man einen Vektor von Vektoren bieten könnte einen 2D-Array darstellen (lassen Sie sich von ganzzahligen Werten sagen):

std::vector<std::vector<int>> my2DArray; 

Nun, in Bezug auf Effizienz vielleicht Leistung und Speicherfragmentierung In diesem Fall ist es besser, einen 1D-Vektor zu verwenden, der intern mit einer Schnittstelle gehalten wird, die den 2D-Koordinatenzugriff ermöglicht.

Dazu müssten Sie jedoch die Dimensionsgrenzen kennen und spezifizieren.

Also, wenn Sie wirklich eine 2D-Struktur ohne Anfangsgröße behalten möchten, ist der oben erwähnte Vektor der Vektoren der Weg zu gehen.

1

Ich schrieb ein einfaches Programm mit Zeigern, neuen und Löschfunktionen. Sie können mehr Funktionalität hinzufügen. Hier

#include <iostream> 
using namespace std; 
int main() 
{ 
    int size; 
    cout << "Input size of 2D array : "; 
    cin >> size; 

    int *ptr; // Declare Pointer 

    ptr = new int[size*size]; // Allocate memory of all elements in 2D array 

    for (int i = 0; i < size*size; i++) { 
     *(ptr + i) = 0; // Initialize every element to 0 
    } 

    cout << "Printing the 2D Array" << endl << endl; 

    int iterSize = 0; 

    for (int i = 0; i < size; i++) { 
     for (int j = 0; j < size; j++) { 
      cout << *(ptr + iterSize) << " "; 
     } 
     cout << endl; 
    } 

    delete [] ptr; // ptr memory is released 

    return 0; 
} 

ist die Ausgabe alle Elemente auf 0 initialisiert:

Initialized all elements to 0

+1

'cout << * (ptr + i + j) <<" ";' ist falsch –

+0

Vielen Dank für @MikeVine, ich habe den Code geändert, indem ich eine neue Variable iterSize hinzugefügt habe –

Verwandte Themen