2011-04-07 3 views
0

은 내가 함수에 전달 된 포인트의 배열뿐만 아니라 배열이 포함 얼마나 많은 요소 나에게 말한다 정수 내가 무엇입니까 배열 만들기/크기 조정 ... 비 상수를 사용할 수 없습니까?

struct Point { 
int x, int y 
} 

같은 구조체 정의합니다. 어떻게하면 배열에 요소를 추가 할 수 있습니까? 배열을 동적으로 크기를 조정할 수 없으므로 새 요소를 추가하는 방법이 없다는 것을 알고 있습니다. 따라서 새 요소를 만들고 각 요소를 복사해야합니다 ... 그러나 다음을 수행하려고 할 때 :

Point newPoints[i+1]; 

나는 상수 값을 기대한다고 들었는데, 물론 i + 1이 필요하기 때문에 나는 그것을 줄 수 없다. 나는 변하기 쉽다. C++은 나를 슬프게 만듭니다. (분명하지 않은 경우, 신성한 존재가 당신을 위해 모든 물건을 관리하는 땅에서 왔습니다 ...)

P. 나는 배열을 사용해야합니다 ... 언급하는 것을 잊었습니다.

+2

왜 배열을 사용해야합니까? –

+0

가능한 중복 [동적 배열] (http://stackoverflow.com/questions/232445/dynamic-arrays) – Aamir

+0

C++에는 std :: vector가 있습니다. –

답변

0

새 malloc을 사용해야 할까봐 두려워합니다. 난 단지 런타임에 결정되므로 컴파일시 스택에 필요한 메모리를 정적으로 할당 할 수있는 방법이 없습니다.

2

표준 C++에서는 런타임 세트 크기로 배열을 만들 수 없습니다. 당신이 중 하나를 수행해야합니다

  1. new Point[i+1]를 사용하여 값을 할당 한 후 포인터로 newPoints을 선언하고, 나중에 다시 delete []을 적용.
  2. newPoints은 자동으로 정리를 관리하는 boost::scoped_array과 같은 것을 사용합니다.
  3. std::vector과 같은 어레이가 아닌 배열을 사용하십시오. &v[0]을 사용하여 포인터를 얻을 수 있습니다.
  4. GCC에서 제공하는 것과 같이 비표준 확장명을 사용하십시오.
0

정수 값을 사용해야하는 이유는 스택에 newPoints 배열이 만들어지고 컴파일러가 컴파일 시간에 얼마나 큰지 알아야하기 때문입니다. 동적 크기를 지정하려면 new []와 delete [] 또는 동적 데이터 구조 클래스 (STL 에서처럼)를 사용해야합니다.

관련 문제