2014-01-21 2 views
2

저는 C++을 처음 사용합니다. 나는 수업에서 문제를 연구하고있다. 우리는 동적 배열을 사용하여 파일에서 단어를 읽어야합니다.C++의 동적 배열과 Java의 ArrayList

여기 간단한 질문입니다.

  1. 동적 배열은 포인터 사용을 의미합니까? 새로운 배열을 가리킨다는 의미입니다.
  2. Java에서 ArrayList를 만들고 크기를 동적으로 변경할 수 있습니다. 하지만 C++에서 나에게 동적 배열을 사용한다는 것은 배열의 크기를 큰 숫자로 설정 한 다음 동적으로 그 배열을 할당한다는 것을 의미합니까?
  3. 동적 배열에서 초과 인덱스를 잘라낼 방법이 있습니까? 그럼 결국 배열을 삭제 내가 C에서 가지고있는 유일한 선택 + + 무엇입니까?

감사합니다. 포인터와 동적 배열 만 사용할 수 있습니다. 고맙습니다.

+0

도움을 주셔서 감사합니다. 매우 감사! –

답변

3

Java ArrayList은 C++ Vector과 비교됩니다. 당신이 C에서 동적 int 배열을 선언 그래서 만약 변경하지 않는 일반 동적 배열 ++ 런타임 크기 : 당신이 벡터를 사용하는 경우

int *arr = new int[10]; 

그 배열의 크기는 그러나 10

유지됩니다

std::vector<int> arr(10); 

그런 다음이 벡터가 10 개 요소를 채우면 벡터 개체가 자동으로 더 많은 메모리를 할당합니다.

질문에 대답하기 위해 동적 배열은 힙 할당 배열이 배치 된 메모리 위치를 추적하기 위해 포인터를 사용한다는 것을 의미합니다. 그러나 벡터를 사용하면 내부적으로 처리됩니다.

+0

와우, 고마워! 이것은 나를 위해 많은 것을 명확하게했다. 좋은 하루 되세요 :-) –

1

동적 배열이 참조 할 수 있다고 가정합니다. 당신이해야 할 일을 살펴보고 결정하십시오. 크기가 고정 된 배열을 사용하기 위해 장면을 만드나요? 나는 파일이 얼마나 큰지 미리 알지 못하기 때문에 벡터가 여기에서 최고 일 것이라고 추측합니다.

std::vector<string> words; 

또한 정보를 얻기 위해 벡터 클래스는 동적으로 할당 된 배열에 대한 포인터 만 저장합니다. 더 많은 공간이 필요할 때마다 새 배열을 만들고 이전 배열의 데이터를 복사 한 다음 삭제합니다. 이 모든 일은 배경에서 발생합니다.

1

Java ArrayList와 동일한 C++는 std :: vector입니다. 대문자로 된 용어 "동적 배열"은 개념 "배열"에 적용되는 일반적인 형용사 "동적"보다는 특정한 의미를 가진 것처럼 사용합니다. C++ 사양에서 "동적 배열"은 고정 크기를 가지며 초기화/생성 될 때 설정되지만 범위가 입력 될 때마다 (그리고 배열이 다시 만들어 질 때마다) 다른 크기를 가질 수있는 지역 변수입니다. 범위에 대해 로컬이므로 일시적으로 파일을 읽지 않고 저장하는 데 너무 유용하지 않습니다. C++에는 동적 어레이와 마찬가지로 생성 될 때 크기가 설정되지만 명시 적으로 삭제 될 때까지 유지되는 힙 할당 배열이 있습니다. 이는 유용 할 수 있습니다. 이들은 일반적인 형용사에서 "동적"이지만 스펙상의 "동적 배열"은 아닙니다.