C++ 예제를 통한 배열의 동적 할당

동적 배열이란 무엇입니까?

동적 배열은 일반 배열과 매우 유사하지만 프로그램 런타임 중에 크기를 수정할 수 있습니다. DynamArray 요소는 연속적인 메모리 블록을 차지합니다.

배열이 생성되면 크기를 변경할 수 없습니다. 그러나 동적 배열은 다릅니다. 동적 배열은 채워진 후에도 크기를 확장할 수 있습니다.

배열을 생성하는 동안 미리 결정된 양의 메모리가 할당됩니다. 동적 배열은 필요할 때 특정 요소만큼 메모리 크기를 늘리기 때문에 그렇지 않습니다.

동적 어레이의 성능에 영향을 미치는 요소

배열의 초기 크기와 성장 인자가 성능을 결정합니다. 다음 사항에 유의하세요.

  1. 배열의 크기와 증가율이 작은 경우 메모리를 더 자주 재할당하게 됩니다. 이로 인해 어레이 성능이 저하됩니다.
  2. 배열의 크기가 크고 성장 인자가 큰 경우 사용되지 않는 메모리 덩어리가 엄청납니다. 이로 인해 크기 조정 작업이 더 오래 걸릴 수 있습니다. 그러면 배열의 성능이 저하됩니다.

새로운 키워드

In C++, new 키워드를 사용하여 동적 배열을 만들 수 있습니다. 할당할 항목 수는 대괄호 쌍 안에 지정됩니다. 형식 이름이 앞에 나와야 합니다. 요청된 개수의 항목이 할당됩니다.

통사론

새로운 키워드의 구문은 다음과 같습니다.

pointer_variable = new data_type;

포인터_변수는 변수의 이름입니다. 포인터 변수.

data_type은 유효해야 합니다. C++ 데이터 형식.

그런 다음 키워드는 첫 번째 항목에 대한 포인터를 반환합니다. 동적 배열을 생성한 후 delete 키워드를 사용하여 삭제할 수 있습니다.

예 1 :

#include<iostream>
using namespace std;
int main() {
	int x, n;
	cout << "Enter the number of items:" << "\n";
	cin >>n;
	int *arr = new int[n];
	cout << "Enter " << n << " items" << endl;
	for (x = 0; x < n; x++) {
		cin >> arr[x];
	}
	cout << "You entered: ";
	for (x = 0; x < n; x++) {
		cout << arr[x] << " ";
	}
	return 0;
}

출력:

새로운 키워드

다음은 코드의 스크린샷입니다.

새로운 키워드

코드 설명 :

  1. iostream 헤더 파일을 프로그램에 포함시켜서 사용하세요. 기능.
  2. 클래스를 호출하지 않고 사용하려면 프로그램에 std 네임스페이스를 포함시킵니다.
  3. main() 함수를 호출합니다. 프로그램 논리는 함수 본문 내에 추가되어야 합니다.
  4. 두 개의 정수 변수 x와 n을 선언합니다.
  5. 사용자에게 변수 n의 값을 입력하라는 텍스트를 콘솔에 인쇄합니다.
  6. 키보드에서 사용자 입력을 읽고 이를 변수 n에 할당합니다.
  7. 총 n 개의 정수를 보유하도록 배열을 선언하고 이를 포인터 변수 *arr에 할당합니다.
  8. 사용자에게 n개의 항목을 입력하라는 메시지를 인쇄합니다.
  9. for 루프를 사용하여 사용자가 입력한 항목을 반복하는 루프 변수 x를 만듭니다.
  10. 사용자가 입력한 요소를 읽어서 arr 배열에 저장합니다.
  11. 본체의 끝 for 루프.
  12. 콘솔에 일부 텍스트를 인쇄합니다.
  13. for 루프를 사용하여 배열 항목을 반복하는 루프 변수 x를 만듭니다.
  14. 콘솔에 arr이라는 배열에 포함된 값을 인쇄합니다.
  15. for 루프 본문의 끝입니다.
  16. 프로그램은 성공적으로 완료되면 값을 반환해야 합니다.
  17. main() 함수 본문의 끝입니다.

참고: 위의 예에서 사용자는 런타임 중에 배열의 크기를 지정할 수 있습니다. 이는 배열의 크기가 런타임 중에 결정됨을 의미합니다..

동적으로 할당된 배열 초기화

동적 배열을 0으로 초기화하는 것은 쉽습니다.

구문 :

int *array{ new int[length]{} };

위 구문에서 길이는 배열에 추가할 요소 수를 나타냅니다. 배열을 0으로 초기화해야 하므로 이 항목은 비워 두어야 합니다.

초기화 목록을 사용하여 동적 배열을 초기화할 수 있습니다. 이를 보여주는 예제를 만들어 보겠습니다.

예 2 :

#include <iostream>
using namespace std;

int main(void) {

	int x; 

	int *array{ new int[5]{ 10, 7, 15, 3, 11 } };

	cout << "Array elements: " << endl;

	for (x = 0; x < 5; x++) {

		cout << array[x] << endl;
	}

	return 0;
}

출력:

동적으로 할당된 배열 초기화

다음은 코드의 스크린샷입니다.

동적으로 할당된 배열 초기화

코드 설명 :

  1. 해당 기능을 사용하려면 iostream 헤더 파일을 프로그램에 포함하세요.
  2. 클래스를 호출하지 않고 사용하려면 프로그램에 std 네임스페이스를 포함하세요.
  3. main() 함수를 호출합니다. 프로그램 논리는 함수 본문 내에 추가되어야 합니다.
  4. x라는 정수 변수를 선언합니다.
  5. 초기화 목록을 사용하여 array라는 동적 배열을 선언합니다. 배열은 5개의 정수 요소를 보유합니다. 배열 길이와 초기화 목록 사이에 "=" 연산자를 사용하지 않았다는 점에 유의하세요.
  6. 콘솔에 일부 텍스트를 인쇄합니다. 엔드는 C++ 끝줄을 뜻하는 키워드. 커서를 다음 문장으로 이동시킵니다.
  7. for 루프를 사용하여 배열 요소를 반복합니다.
  8. 콘솔에 array라는 배열의 내용을 인쇄합니다.
  9. for 루프 본문의 끝입니다.
  10. 프로그램은 성공적으로 완료되면 값을 반환해야 합니다.
  11. main() 함수 본문의 끝입니다.

배열 크기 조정

동적 배열의 길이는 할당 시간 동안 설정됩니다.

그러나, C++ 배열이 할당된 후에 배열의 크기를 조정하는 기본 제공 메커니즘이 없습니다.

그러나 새 배열을 동적으로 할당하고 요소를 복사한 다음 이전 배열을 삭제하면 이 문제를 극복할 수 있습니다.

참고: 이 기술은 오류가 발생하기 쉬우므로 사용하지 마십시오.

동적으로 배열 삭제

동적 배열은 목적이 달성되면 컴퓨터 메모리에서 삭제되어야 합니다. 삭제 문은 이를 수행하는 데 도움이 될 수 있습니다. 해제된 메모리 공간은 다른 데이터 세트를 보관하는 데 사용될 수 있습니다. 그러나 컴퓨터 메모리에서 동적 배열을 삭제하지 않더라도 프로그램이 종료되면 자동으로 삭제됩니다.

참고 :

컴퓨터 메모리에서 동적 배열을 삭제하려면 삭제 대신 delete[]를 사용해야 합니다. []는 CPU에 하나의 변수가 아닌 여러 변수를 삭제하도록 지시합니다. 동적 배열을 다룰 때 delete[] 대신 delete를 사용하면 문제가 발생할 수 있습니다. 이러한 문제의 예로는 메모리 누수, 데이터 손상, 충돌 등이 있습니다.

예 3 :

#include<iostream>
using namespace std;
int main() {
	int x, n;
	cout << "How many numbers will you type?" << "\n";
	cin >>n;
	int *arr = new int[n];
	cout << "Enter " << n << " numbers" << endl;
	for (x = 0; x < n; x++) {
		cin >> arr[x];
	}
	cout << "You typed: ";
	for (x = 0; x < n; x++) {
		cout << arr[x] << " ";
	}
	cout << endl;
	delete [] arr;
	return 0;
}

출력:

동적으로 배열 삭제

다음은 코드의 스크린샷입니다.

동적으로 배열 삭제

코드 설명 :

  1. 해당 기능을 사용하려면 프로그램에 iostream 헤더 파일을 포함시킵니다.
  2. 클래스를 호출하지 않고 사용하려면 프로그램에 std 네임스페이스를 포함시킵니다.
  3. main() 함수를 호출합니다. 프로그램 논리는 함수 본문 내에 추가되어야 합니다.
  4. 정수 데이터 유형의 두 변수 x와 n을 선언합니다.
  5. 콘솔에 텍스트를 출력합니다. 텍스트는 사용자에게 입력할 숫자의 개수를 말하도록 요청합니다.
  6. 키보드에서 사용자 입력을 읽습니다. 입력값은 변수 n에 할당됩니다.
  7. 포인터 변수 *arr을 선언합니다. arr 배열은 총 n개의 정수를 저장하기 위해 일부 메모리를 예약합니다.
  8. 콘솔에 사용자에게 n개의 숫자를 입력하라는 메시지를 출력합니다.
  9. for 루프와 루프 변수 x를 만들어 사용자가 입력한 숫자를 반복합니다.
  10. 사용자가 입력한 숫자를 읽어 arr 배열에 저장합니다.
  11. for 루프 본문의 끝입니다.
  12. 콘솔에 일부 텍스트를 인쇄합니다.
  13. for 루프와 루프 변수 x를 사용하여 배열 arr의 내용을 반복합니다.
  14. 콘솔에 배열 arr의 값을 인쇄합니다.
  15. for 루프 본문의 끝입니다.
  16. 콘솔에 빈 줄을 인쇄합니다.
  17. arr 배열의 메모리를 확보합니다.
  18. 프로그램이 성공적으로 완료되면 값을 반환합니다.
  19. main() 함수 본문의 끝입니다.

요약

  • 일반 배열은 크기가 고정되어 있습니다. 일단 선언되면 크기를 수정할 수 없습니다.
  • 이러한 유형의 배열을 사용하면 메모리 크기가 컴파일 시간에 결정됩니다.
  • 동적 배열은 다릅니다. 런타임 중에 크기가 변경될 수 있습니다.
  • 동적 배열에서는 런타임 중에 크기가 결정됩니다.
  • 동적 배열 C++ new 키워드를 사용하여 선언됩니다.
  • 동적 배열에 저장할 항목의 수를 지정하려면 대괄호를 사용합니다.
  • 배열에 대한 작업이 끝나면 delete 연산자를 사용하여 메모리를 해제할 수 있습니다.
  • []와 함께 delete 연산자를 사용하여 모든 배열 요소의 메모리를 해제합니다.
  • [] 없이 삭제하면 단일 요소의 메모리만 해제됩니다.
  • 크기를 조정할 수 있는 기본 제공 메커니즘이 없습니다. C++ 배열.
  • 리스트 초기화 프로그램을 사용하여 배열을 초기화하려면 "=" 연산자를 사용하지 않습니다.

상세 보기 readmore