C++ 예제를 통한 배열의 동적 할당
동적 배열이란 무엇입니까?
동적 배열은 일반 배열과 매우 유사하지만 프로그램 런타임 중에 크기를 수정할 수 있습니다. DynamArray 요소는 연속적인 메모리 블록을 차지합니다.
배열이 생성되면 크기를 변경할 수 없습니다. 그러나 동적 배열은 다릅니다. 동적 배열은 채워진 후에도 크기를 확장할 수 있습니다.
배열을 생성하는 동안 미리 결정된 양의 메모리가 할당됩니다. 동적 배열은 필요할 때 특정 요소만큼 메모리 크기를 늘리기 때문에 그렇지 않습니다.
동적 어레이의 성능에 영향을 미치는 요소
배열의 초기 크기와 성장 인자가 성능을 결정합니다. 다음 사항에 유의하세요.
- 배열의 크기와 증가율이 작은 경우 메모리를 더 자주 재할당하게 됩니다. 이로 인해 어레이 성능이 저하됩니다.
- 배열의 크기가 크고 성장 인자가 큰 경우 사용되지 않는 메모리 덩어리가 엄청납니다. 이로 인해 크기 조정 작업이 더 오래 걸릴 수 있습니다. 그러면 배열의 성능이 저하됩니다.
새로운 키워드
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; }
출력:
다음은 코드의 스크린샷입니다.
코드 설명 :
- iostream 헤더 파일을 프로그램에 포함시켜서 사용하세요. 기능.
- 클래스를 호출하지 않고 사용하려면 프로그램에 std 네임스페이스를 포함시킵니다.
- main() 함수를 호출합니다. 프로그램 논리는 함수 본문 내에 추가되어야 합니다.
- 두 개의 정수 변수 x와 n을 선언합니다.
- 사용자에게 변수 n의 값을 입력하라는 텍스트를 콘솔에 인쇄합니다.
- 키보드에서 사용자 입력을 읽고 이를 변수 n에 할당합니다.
- 총 n 개의 정수를 보유하도록 배열을 선언하고 이를 포인터 변수 *arr에 할당합니다.
- 사용자에게 n개의 항목을 입력하라는 메시지를 인쇄합니다.
- for 루프를 사용하여 사용자가 입력한 항목을 반복하는 루프 변수 x를 만듭니다.
- 사용자가 입력한 요소를 읽어서 arr 배열에 저장합니다.
- 본체의 끝 for 루프.
- 콘솔에 일부 텍스트를 인쇄합니다.
- for 루프를 사용하여 배열 항목을 반복하는 루프 변수 x를 만듭니다.
- 콘솔에 arr이라는 배열에 포함된 값을 인쇄합니다.
- for 루프 본문의 끝입니다.
- 프로그램은 성공적으로 완료되면 값을 반환해야 합니다.
- 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; }
출력:
다음은 코드의 스크린샷입니다.
코드 설명 :
- 해당 기능을 사용하려면 iostream 헤더 파일을 프로그램에 포함하세요.
- 클래스를 호출하지 않고 사용하려면 프로그램에 std 네임스페이스를 포함하세요.
- main() 함수를 호출합니다. 프로그램 논리는 함수 본문 내에 추가되어야 합니다.
- x라는 정수 변수를 선언합니다.
- 초기화 목록을 사용하여 array라는 동적 배열을 선언합니다. 배열은 5개의 정수 요소를 보유합니다. 배열 길이와 초기화 목록 사이에 "=" 연산자를 사용하지 않았다는 점에 유의하세요.
- 콘솔에 일부 텍스트를 인쇄합니다. 엔드는 C++ 끝줄을 뜻하는 키워드. 커서를 다음 문장으로 이동시킵니다.
- for 루프를 사용하여 배열 요소를 반복합니다.
- 콘솔에 array라는 배열의 내용을 인쇄합니다.
- for 루프 본문의 끝입니다.
- 프로그램은 성공적으로 완료되면 값을 반환해야 합니다.
- 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; }
출력:
다음은 코드의 스크린샷입니다.
코드 설명 :
- 해당 기능을 사용하려면 프로그램에 iostream 헤더 파일을 포함시킵니다.
- 클래스를 호출하지 않고 사용하려면 프로그램에 std 네임스페이스를 포함시킵니다.
- main() 함수를 호출합니다. 프로그램 논리는 함수 본문 내에 추가되어야 합니다.
- 정수 데이터 유형의 두 변수 x와 n을 선언합니다.
- 콘솔에 텍스트를 출력합니다. 텍스트는 사용자에게 입력할 숫자의 개수를 말하도록 요청합니다.
- 키보드에서 사용자 입력을 읽습니다. 입력값은 변수 n에 할당됩니다.
- 포인터 변수 *arr을 선언합니다. arr 배열은 총 n개의 정수를 저장하기 위해 일부 메모리를 예약합니다.
- 콘솔에 사용자에게 n개의 숫자를 입력하라는 메시지를 출력합니다.
- for 루프와 루프 변수 x를 만들어 사용자가 입력한 숫자를 반복합니다.
- 사용자가 입력한 숫자를 읽어 arr 배열에 저장합니다.
- for 루프 본문의 끝입니다.
- 콘솔에 일부 텍스트를 인쇄합니다.
- for 루프와 루프 변수 x를 사용하여 배열 arr의 내용을 반복합니다.
- 콘솔에 배열 arr의 값을 인쇄합니다.
- for 루프 본문의 끝입니다.
- 콘솔에 빈 줄을 인쇄합니다.
- arr 배열의 메모리를 확보합니다.
- 프로그램이 성공적으로 완료되면 값을 반환합니다.
- main() 함수 본문의 끝입니다.
요약
- 일반 배열은 크기가 고정되어 있습니다. 일단 선언되면 크기를 수정할 수 없습니다.
- 이러한 유형의 배열을 사용하면 메모리 크기가 컴파일 시간에 결정됩니다.
- 동적 배열은 다릅니다. 런타임 중에 크기가 변경될 수 있습니다.
- 동적 배열에서는 런타임 중에 크기가 결정됩니다.
- 동적 배열 C++ new 키워드를 사용하여 선언됩니다.
- 동적 배열에 저장할 항목의 수를 지정하려면 대괄호를 사용합니다.
- 배열에 대한 작업이 끝나면 delete 연산자를 사용하여 메모리를 해제할 수 있습니다.
- []와 함께 delete 연산자를 사용하여 모든 배열 요소의 메모리를 해제합니다.
- [] 없이 삭제하면 단일 요소의 메모리만 해제됩니다.
- 크기를 조정할 수 있는 기본 제공 메커니즘이 없습니다. C++ 배열.
- 리스트 초기화 프로그램을 사용하여 배열을 초기화하려면 "=" 연산자를 사용하지 않습니다.