2017-12-02 2 views
0

특정 크기의 배열을 만든 다음 해당 배열을 하나씩 확장하는 프로그램을 만들려고합니다. 또한 함수 호출 전에 첫 번째 배열을 표시하고 함수 호출 후에 새 배열을 표시해야합니다.오버로드없이 표준 정수 배열이나 고유 한 포인터 배열을 사용하는 함수를 만드는 방법은 무엇입니까?

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

난 기능을 오버로드하지 않고도 정상 정수 배열 스마트 포인터 배열을 모두 표시하는 표시 기능 싶다.

디스플레이 기능은 주로 표준 정수 배열에만 적용됩니다. main 함수 내부에서 for 루프를 사용하면 확장 함수가 작동하고 새로운 고유 포인터 배열이 올바른 값을 표시하지만 표시 함수에서 둘 다 사용하는 방법을 파악할 수 없습니다.

답변

0

나는 여러 가지 전달 방법을 망쳐서 알아 냈습니다.

먼저 배열의 displayArray() 매개 변수를 *가있는 참조로 변경했습니다. 에

displayArry(newArry, SIZE + 1); 

변경 :

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

void displayArry(int* arry, int items) 

및 행

void displayArry(int arry[], int items) 

변화 난이 같은 unique_ptr 어레이의 단부에 갔지()를 첨가하여

이렇게하면 모든 데이터를 리퍼러로 전달할 수 있습니다. nce를 함수에 추가하고 일반 배열 또는 unique_ptr 배열을 올바르게 표시 할 수있게합니다.

여기에 대한 의견이 있거나 대신 수행해야하는 방식 또는 더 잘 수행 할 수있는 방법이 있으면 의견을 보내 주시면 감사하겠습니다.

관련 문제