So erstellen Sie ein dynamisches Array von Ganzzahlen

Lesezeit: 6 Minuten

So erstellen Sie ein dynamisches Array von Ganzzahlen
Sudantha

So erstellen Sie ein dynamisches Array von Ganzzahlen in C++ mit der new Stichwort?

  • Sie verwenden ein std::vector<int>. Und ein Buch.

    – GManNickG

    27. Oktober 2010 um 4:32 Uhr


  • Wie weisen Sie seine Daten zu und wie greifen Sie darauf zu, sobald er initialisiert ist?

    Benutzer1073395

    30. November 2011 um 13:05 Uhr

  • Schauen Sie sich diesen Beitrag an, hier ist er im Detail für jede Art von Datentypen angegeben: Programmingtunes.com/dynamic-array-in-c

    – Benutzer2808359

    25. Juli 2014 um 12:44 Uhr

  • cs.nmsu.edu/~rth/cs/cs471/C%2B%2BDynamicArray.pdf

    – Nagappa

    4. Juni 2020 um 9:40 Uhr

  • quora.com/Was-ist-die-Bedeutung-von-%E2%80%9Cint-*p-new-10-%E2%80%9D#:~:text=Die%20Anweisung%20definiert%20und%20initialisiert%20ein%20Array%20von%20Ganzzahlen.&text=Diese%20Anweisung%20wird%20dynamisch%20zugewiesen ,Ganzzahlen%20aus%20dem%20Haufen…

    – Nagappa

    4. Juni 2020 um 9:42 Uhr

int main()
{
  int size;

  std::cin >> size;

  int *array = new int[size];

  delete [] array;

  return 0;
}

Vergiss es nicht delete jedes Array, mit dem Sie zuweisen new.

  • 8 Jahre später könnte dieser Kommentar Anfänger @GManNickG verwirren, wie wäre es mit dem Löschen (da ich annehme, dass er gemacht wurde, bevor Jason Iverson das Array tatsächlich gelöscht hat)?

    – Gsamaras

    6. Oktober 2018 um 15:00 Uhr


  • @gsamaras: Ich stimme zu, dass es verwirrend ist, aber es ist immer noch richtig: Ihr Code sollte keine manuelle Löschung haben, die Sie nicht vergessen müssen. Das heißt, verwendete Smart Pointer und andere Container.

    – GManNickG

    6. Oktober 2018 um 16:40 Uhr

  • @GManNickG Ich denke, Ihr Kommentar könnte weniger dogmatisch sein. Der Code ist korrekt, auch wenn er nicht ideal ist. Smart Pointer und Container sind fast immer eine bessere Option (insbesondere in einer Anfängerfrage wie dieser), aber nicht “immer” immer.

    – Spencer

    10. April 2020 um 16:03 Uhr

  • Ich stimme @Spencer zu, der Code ist nicht falsch, es ist einfach, perfektes C++. Sie können davon ausgehen, dass es eine Alternative gibt, es als Best Practices bezeichnen usw. Aber an diesem Beispiel an sich ist nichts auszusetzen.

    – Arman

    3. Dezember 2020 um 9:15 Uhr

So erstellen Sie ein dynamisches Array von Ganzzahlen
Ben Voigt

Seit C++11 gibt es eine sichere Alternative zu new[] und delete[] was im Gegensatz zu Null-Overhead ist std::vector:

std::unique_ptr<int[]> array(new int[size]);

In C++14:

auto array = std::make_unique<int[]>(size);

Beides stützt sich auf die gleiche Header-Datei, #include <memory>

  • Ich weiß nicht, ob es nur an mir liegt, aber diese C++11-Syntax sieht schrecklich aus. Das C++14 sieht viel besser aus. Andererseits habe ich seit Pre-C++ 11 nicht mehr mitgehalten. Es ist schwer, sich an all diese neuen Ausdrücke zu erinnern.

    – Keya Kersting

    9. April 2020 um 20:59 Uhr


1646910608 911 So erstellen Sie ein dynamisches Array von Ganzzahlen
jveazey

Vielleicht möchten Sie die Verwendung der Standard-Vorlagenbibliothek in Betracht ziehen. Es ist einfach und leicht zu bedienen, und Sie müssen sich keine Gedanken über Speicherzuweisungen machen.

http://www.cplusplus.com/reference/stl/vector/vector/

int size = 5;                    // declare the size of the vector
vector<int> myvector(size, 0);   // create a vector to hold "size" int's
                                 // all initialized to zero
myvector[0] = 1234;              // assign values like a c++ array

  • @Ed, die Einschränkung in der Frage scheint eher willkürlich zu sein. std::vector mit dem entsprechenden Konstruktor funktioniert wirklich gut und sollte als Alternative aufgezeigt werden. Manchmal stellen die Leute die Frage schlecht, und dies könnte als einer dieser Fälle gelten – es ist sehr kurz und gibt keinen Grund dafür, es vorzuziehen new.

    – Markieren Sie Lösegeld

    27. Oktober 2010 um 4:23 Uhr

  • @Ed: Es gibt keinen Grund zu verwenden new[] anstatt std::vector.

    – GManNickG

    27. Oktober 2010 um 4:33 Uhr

  • @baash: In C++ gibt es nie einen Grund. Wenn Sie sich, aus welchem ​​Grund auch immer, entscheiden, „die Standardbibliothek zu entfernen“, programmieren Sie nicht mehr in C++. Mein Kommentar bezieht sich auf die C++-Sprache, nicht auf die C++-Sprache, die wir auf meinem Gerät verwenden. Trotzdem sollten Sie das nicht müssen delete alles manuell, überhaupt. Ebenfalls, std::vector ist ein dynamisches Array und macht nichts mit einer verknüpften Liste. Es ist nur ein Wrapper um einen Teil des Speichers.

    – GManNickG

    27. Oktober 2010 um 5:01 Uhr

  • @Montdidier: Nein. Sie verwenden immer noch new und delete Wrapper zu implementieren. Der Punkt ist, dass Sie keine Ressource verwalten und benutze es, du machst das eine oder das andere.

    – GManNickG

    27. Oktober 2010 um 5:50 Uhr

  • @Montdidier: Beginnen wir mit den Behauptungen: In C++ werden alle Instanzen von new[] kann ersetzt werden durch std::vector. Und weil std::vector Ressourcenmanagement korrekt von der Ressourcennutzung (SBRM) trennt, sollten wir dies tun.

    – GManNickG

    27. Oktober 2010 um 6:35 Uhr

int* array = new int[size];

Sobald es um dynamische Arrays geht, möchten Sie möglicherweise nicht nur Arrays mit variabler Größe erstellen, sondern auch deren Größe während der Laufzeit ändern. Hier ein Beispiel mit memcpykönnen Sie verwenden memcpy_s oder std::copy auch. Je nach Compiler, <memory.h> oder <string.h> wird vielleicht benötigt. Bei Verwendung dieser Funktionen weisen Sie einen neuen Speicherbereich zu, kopieren Werte von ursprünglichen Speicherbereichen dorthin und geben sie dann frei.

//    create desired array dynamically
size_t length;
length = 100; //for example
int *array = new int[length];

//   now let's change is's size - e.g. add 50 new elements
size_t added = 50;
int *added_array = new int[added];

/*   
somehow set values to given arrays
*/ 

//    add elements to array
int* temp = new int[length + added];
memcpy(temp, array, length * sizeof(int));
memcpy(temp + length, added_array, added * sizeof(int));
delete[] array;
array = temp;

Sie können stattdessen die Konstante 4 verwenden sizeof(int).

So erstellen Sie ein dynamisches Array von Ganzzahlen
SCBürgel

Weisen Sie dynamisch etwas Speicher zu new:

int* array = new int[SIZE];

Die obigen Antworten sind alle gut für die Zuweisung eindimensionaler Int-Arrays. Wie auch immer, ich möchte hinzufügen, dass dies auch für mehrdimensionale Arrays möglich ist, die Sie normalerweise so definieren würden int[][] matrix = {{1,2}, {3,4}}.

Der Schlüssel ist, dass Sie alle Elemente dynamisch in einem Array speichern und die Tatsache nutzen, dass das Array ein kontinuierlicher Block im Speicher ist (siehe hier für eine Erläuterung von “Block”), was bedeutet, dass Sie sich selbst durch Dimensionen “schneiden” können. Unten sehen Sie ein Beispiel für ein 2d-Array.

Eine Diskussion zu diesem Thema finden Sie hier auf SO.

/*Defining a 2d-matrix.*/
struct Matrix {

    int rows, columns;
    int* matrix;

    Matrix(int rows, int columns) : rows(rows), columns(columns) {
        // Keep in mind that arrays cannot be generated during runtime
        // since the compiler needs to know the size to allocate in memory.
        // Thus, use dynamic memory and keep in mind to delete it!

        // This only uses a single array since "new" cannot create 
        // multidimensional arrays by default. Thus, everything is
        // written in a single memory-block and accessed via getElement().
        matrix = new int[columns * rows];
    }

    ~Matrix() {
        // Release the memory after destroying the Matrix-object
        delete matrix;
    }

    /*Access the element at position [r]ow and [c]olumn.*/
    int getElement(int r, int c) {
        // matrix[c][r] is rewritten as matrix[column + columns * rows] 
        // -> matrix <=> Single memory block
        return matrix[c + columns * r];
    }

    /*Set the element at position [r]ow and [c]olumn with given [val]ue.*/
    void setElement(int r, int c, int val) {
        matrix[c + columns * r] = val;
    }
};

Ein Beispiel zum Befüllen einer solchen Matrix-Objekt wäre:

    /*Initialize the matrix with the continuous numbers 0..N*/
    void Matrix::initDummyMatrix(){
        int counter = 0;
        for (int row = 0; row < rows; ++row) {
            for (int col = 0; col < columns; ++col) {
                setElement(row, col, counter++);
            }
        }
    }

987680cookie-checkSo erstellen Sie ein dynamisches Array von Ganzzahlen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy