2013-03-13 3 views
1

내가 지금 런타임에 힙에 배열을 생성 한 다음 필요할 때마다 더 많은 공간을 할당 할 수 있습니까?

char *a; 
a = new char[4]; 

을 말할 수, 그것은 더 배열의 크기를 확장 할 수 있습니까?

는 C++에서 가능성이 내가 a[0] a[3]에 내부에 넣어 모든 값을 유지하지만 지금은 a[4]a[5] 등 더 많은 공간을 원하는 말? 더 많은 공간이 나는 a[1]에 가서 더 많은 공간을 할당 할 수 있습니다 필요할 때마다

char* a[10]; 
a[0] = new char[size]; 

:


은 처음에는 어쩌면 난 그냥 만들 수있는 것 같은 느낌이 들었다. 이것은 제가 지금 생각할 수있는 유일한 대안입니다.

+6

왜 std :: vector를 사용하지 않으시겠습니까? – perreal

+0

수치 스럽지만 http://stackoverflow.com/q/3105001/961353 –

답변

6

불행히도 C++에서는 불가능합니다. 새 영역을 할당하고 이전 영역을 새 영역으로 복사해야합니다.

그러나 C++에는 std::vector과 같은 다른 기능이있어 수동으로 이러한 작업을 처리 할 필요가 없습니다.

+1

을 참조하십시오. 연속적 일 필요가없는 경우 ['std :: deque'] (http : //en.cppreference. co.kr/w/cpp/container/deque) 재 할당을 피할 수 있습니다. –

+0

고마워,이 프로그램에 내가 쓰고 싶은 소리가 들리네. – Leonardo

-1

char * a 대신 char ** a를 사용할 수 있습니다. 이 작업 주위이지만

char** a = new char*[4]; 

for(int i=0; i<4; i++) 
    (*a)[i] = new char(i); /* feed values to array */ 

/* now you need a[4]? no problem */ 
char tmp = (*a)[3]; 
a[3] = new char[2]; 

a[3][0] = tmp; 
a[3][1] = xyz; /* this is you a[4] */ 

, 내가 사용하는 벡터에 건의 할 것입니다.

+0

3 호선은 나에게 의미가 없습니다. – Leonardo

+0

-1 이렇게하면 의미가 변경되어 상당한 성능 저하가 발생할 수 있습니다. –

+0

@AlexChamberlain 그것은 단지 주위의 작업이었습니다. 물론 성능 오버 헤드가 있고 벡터가 권장됩니다. –