2017-12-02 9 views
0

私は特定のサイズの配列を作成し、その配列を1つ拡張するプログラムを作成しようとしています。また、関数呼び出しの前に最初の配列を、関数呼び出しの後に新しい配列を表示する必要があります。標準整数配列またはユニークなポインタ配列をオーバーロードせずに使用する関数を作成するにはどうすればよいですか?

#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; 
} 

Iは、関数をオーバーロードすることなく、通常の整数配列とスマートポインタ配列の両方を表示する表示機能を希望。

表示機能は、ほとんどの場合、標準の整数配列に対してのみ機能します。 main関数の中でforループを使用すると、拡張関数が機能し、新しい一意のポインタ配列が正しい値を表示しますが、表示関数で両方の関数を使用する方法を見つけることができません。

答えて

0

私はさまざまな渡し方を使いこなすことでそれを理解しました。

最初に、配列のdisplayArray()パラメータを*の付いた参照に変更しました。

void displayArry(int* arry, int items) 

void displayArry(int arry[], int items) 

変更した後、私はこのようなunique_ptrを配列の最後に()に.getを追加:

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

displayArry(newArry, SIZE + 1); 

変更を

これにより、私はすべてのデータを参照することができますnceを関数に渡し、通常の配列またはunique_ptrの配列を適切に表示することができます。

これに何か考えがある場合、またはこれを代わりに行う方法、またはこれがよりうまくいく方法であれば、私はフィードバックに感謝します。

関連する問題