2017-10-09 1 views
-4

동적 메모리를 사용하여 숫자를 동적 배열에 저장하는 클래스를 만들려고합니다. 따라서 123은 arr [0] = 1, arr [1] = 2, arr [2] ] = 3) 숫자를 추가 할 수 있습니다 (예 : 저장된 숫자가 123 일 경우 더 많은 숫자를 추가 할 수 있습니다 .. 45 및 새 숫자는 12345).동적 메모리의 배열에 추가

여기까지 제 코드가 있습니다 : 어떻게 추가 기능을 만들까요?

#include "stdafx.h" 
#include <iostream> 

using namespace std; 

int main() 
{ 
    int *exampleArray; //new array into exsistence 

    exampleArray = new int[5]; // dynamically allocates an array of 5 ints 
    for (int i = 1; i < 5; i++) 
    { 
     exampleArray[i] = i; 
     cout << exampleArray[i] << endl; 
    } 

    delete exampleArray; // deleted from exsistence 

    system("pause"); // to show the output 
    return 0; 
} 
+3

? 자릿수를 어디에서 추가 할 계획입니까? 현재 할당 된 크기가 충분한 지 확인하고 크기 조정 + 배열 복사를 생각하십시오. 아니면 더 좋게 - 동적'int' 배열 대신에'std :: vector '을 사용하십시오 – Fureeish

+3

또한''[[''] [] [] [] [delete []'해야합니다. (https://stackoverflow.com/q/1553382/10077). –

+0

추가 메모리 할당이 원래 배열 끝에 메모리를 할당하는 것보다 아무런 보장이 없습니다. –

답변

3

당신은 다음 new[]와 배열, 그것으로 기존의 배열에서 기존 값을 복사, 그것은 더 큰 크기의 새로운 배열이 new[]이다에 "추가"할 수있는 유일한 방법 및 delete[] (하지를 할당하는 경우 delete) 이전 배열을 수정하고 새 배열을 가리 키도록 배열 포인터를 업데이트하십시오.

또한 배열의 인덱스는 0입니다. 루프가 exampleArray[0]에 데이터를 입력하지 않았습니다. 예를 들어

: 당신은 당신이 실제로 메모리를 초과 할 때 당신이 실제로 필요한 것보다 더 많은 메모리를 미리 할당하고, 전용 "성장"에 의해이 조금을 최적화 할 수 있습니다

int *arr = new int[3]; 
arr[0] = 1; 
arr[1] = 2; 
arr[2] = 3; 

... 

int *newarr = new int[5]; 
std::copy(arr, arr+3, newarr); 
newarr[3] = 4; 
newarr[4] = 5; 
delete[] arr; 
arr = newarr; 

... 

delete[] arr; 

. 예를 들어 :

가장 대신 std:vector을 사용하여 처리 할 것을 요구하고 무엇을 말했다되고 그건
int *arr = NULL; 
int num = 0, cap = 0; 

void append(int digit) 
{ 
    if (num == cap) 
    { 
     int *newarr = new int[cap + 10]; 
     std::copy(arr, arr+num, newarr); 
     delete[] arr; 
     arr = newarr; 
     cap += 10; 
    } 

    arr[num] = digit; 
    ++num; 
} 

... 

append(1); 
append(2); 
append(3); 

... 

append(4); 
append(5); 

... 

delete[] arr; 

. 이 추한 세부 사항을 처리하는 동적 길이 컨테이너입니다. 예를 들어

: 당신은 "* * APPEND"무엇을 의미합니까

std::vector<int> arr; 

void append(int digit) 
{ 
    arr.push_back(digit); 
} 

... 

append(1); 
append(2); 
append(3); 

... 

append(4); 
append(5); 

... 
+0

위의 'std :: vector'부분을 강조하거나 너의 답. – user0042

+0

@ user0042 : 내 답변, 내 선택, 내 것이 아닙니다. 나는 사람들에게 더 나은 제안을하기 전에 어떻게 그들의 코드의 범위 내에서 작동 하는지를 설명하는 것을 선호한다. –

+0

_ @ Remy_ Fair enough! – user0042

관련 문제