2017-12-02 1 views
0

Ich versuche ein Programm zu erstellen, das ein Array einer bestimmten Größe erstellt und dieses Array dann um eins erweitert. Es muss auch das erste Array vor dem Funktionsaufruf und das neue Array nach dem Funktionsaufruf anzeigen. Wie erstelle ich eine Funktion, um ein Standard-Integer-Array oder ein eindeutiges Pointer-Array ohne Überladung zu verwenden?

#include <iostream> 
#include <memory> 

using namespace std; 

unique_ptr<int[]> newCopy(int arry[], int items) 
{ 
    unique_ptr<int[]> p(new int[items + 1]); 

    p[0] = 0; 

    for (int i = 0; i < items; i++) 
    { 
     p[i + 1] = arry[i]; 
} 

return p; 

} 

void displayArry(int arry[], int items) 
{ 
    for (int i = 0; i < items; i++) 
    { 
     cout << arry[i] << " "; 
    } 

    cout << endl; 
} 

int main() 
{ 
    const int SIZE = 5; 
    int myNumbers[SIZE] = {18, 27, 3, 14, 95}; 

    displayArry(myNumbers, SIZE); 

    unique_ptr<int[]> newArry = newCopy(myNumbers, SIZE); 

    //displayArry(newArry, SIZE + 1); 

    for (int i = 0; i < SIZE+1; i++) 
    { 
     cout << newArry[i] << " "; 
    } 

    return 0; 
} 

ich würde die Display-Funktion so sowohl den normalen Integer-Array und den Smartpointer Array anzuzeigen, ohne die Funktion zu überlasten aufweisen.

Die Anzeigefunktion funktioniert hauptsächlich wie vorgesehen nur für das Standard-Integer-Array. Die Erweiterungsfunktion funktioniert und das neue eindeutige Zeigerarray zeigt die korrekten Werte an, wenn ich eine for-Schleife innerhalb der Hauptfunktion verwende, aber ich kann nicht herausfinden, wie beide in der Anzeigefunktion verwendet werden.

Antwort

0

Ich habe es herausgefunden, indem ich mit verschiedenen Passing-Methoden herumhantiert habe.

Zuerst habe ich den displayArray() Parameter des Arrays in eine Referenz mit * geändert.

void displayArry(int arry[], int items) 

Änderungen

void displayArry(int* arry, int items) 

und dann hinzugefügt i .get(), um das Ende des unique_ptr Array wie folgt:

displayArry(newArry, SIZE + 1); 

Änderungen:

displayArry(newArry.get(), SIZE + 1); 

Dies ermöglicht mir, alle Daten per Referenz zu übergeben nce zur Funktion und ermöglicht es, entweder ein normales Array oder ein unique_ptr-Array richtig anzuzeigen.

Wenn es irgendwelche Gedanken darüber gibt, oder Wege, dass dies stattdessen getan werden sollte, oder Möglichkeiten, wie dies besser gemacht werden könnte, würde ich das Feedback schätzen.

Verwandte Themen