동적 배열: 시작
동적 배열
배열에 대한 이전 과정에서 다음과 같이 배열을 만드는 방법을 살펴보았습니다.
const int Nmax = 1000;
정수 A[Nmax];
또는 이:
intA[1000];
이 메소드는 정적 배열을 생성합니다. 한 가지 단점은 프로그램이 실행되는 동안 배열 요소의 크기와 유형을 변경할 수 없다는 것입니다.
위의 예에서는 1000개 요소의 정적 배열이 만들어집니다. 즉, int
유형의 1000개 요소(int
유형의 1000개 요소 배열)를 저장하기 위해 메모리에 영역이 할당됩니다. 배열의 시작 주소는 A
변수에 저장됩니다. 1000개 이상의 요소 배열을 처리해야 하는 경우 설명을 변경하고 프로그램을 다시 컴파일해야 합니다. 작은 배열로 작업할 때 정적 배열에 할당된 대부분의 메모리가 낭비됩니다.
컴퓨터 메모리를 효율적으로 사용하기 위해서는 동적으로 할당하는 것이 필요합니다. 즉, 필요에 따라 프로그램 실행 중에 개체에 대한 메모리를 할당해야 합니다(새 개체 생성).
C++에서 new
및 delete
작업은 컴퓨터 메모리를 동적으로 할당하도록 설계되었습니다. 작업 new
여유 메모리 영역에서 메모리를 할당하고 delete
작업은 할당된 메모리를 할당 해제합니다.
동적 변수 생성 및 삭제 예시
int *A = 새 int; // int 타입의 객체 생성
*A = 15; // 객체 초기화는 포인터(*)를 통해 발생합니다.
// 즉시 초기화 가능
// 동적 객체를 선언할 때
int *B = 새로운 int(25);
cout << *A << " " << *비; // 포인터로 값 출력
삭제A; // 할당된 메모리 해제
B 삭제;
new
작업은 지정된 유형의 개체를 만들고 메모리를 할당하며 지정된 메모리 위치에 대한 올바른 유형의 포인터를 반환합니다. 예를 들어 여유 공간이 없는 경우와 같이 메모리를 할당할 수 없는 경우 널 포인터가 반환됩니다. 즉, 포인터는 값 0을 반환합니다. 모든 데이터 유형에 대해 메모리 할당이 가능합니다. int
, float
, double
, char
등.
같은 방식으로 C++에서는 동적 메모리 할당을 사용할 동적 배열을 생성할 수 있습니다. 프로그램이 실행되는 동안 예를 들어 키보드에서 동적 변수를 생성하는 데 사용할 수 있는 이러한 배열의 크기입니다.
C 문법
intN;
scanf("%d", &N);
int *mas = malloc (sizeof(int) * N);
// 나중에 배열 크기를 조정하기 위해
// realloc
에서 사용합니다.
...
무료(마스); // 할당된 메모리 해제
<사업부>
C++ 구문에서
intN;
cin>> N;
int*A = 새로운 int[N];
// 배열의 크기를 변경하려면 다음을 수행할 수 있습니다.
// 데이터를 다른 배열로 전송하고 이전 배열을 지웁니다.
...
삭제 []mas; // 할당된 메모리 해제
// 대괄호는 다음을 나타냅니다.
// 배열 아래에서 메모리를 해제하고 있음
Problem
정수 시퀀스가 주어집니다. 배열을 만들고 배열에 시퀀스를 두 번 연속으로 쓰는 프로그램을 작성하세요.
입력
처음 주어진 숫자 N
— 시퀀스의 요소 수(1<= N <= 100). 그런 다음 N
개의 숫자가 공백으로 구분되어 기록됩니다.
출력
중복된 시퀀스로 구성된 배열을 출력해야 합니다.
예
<헤드>
<일>#일>
입력 |
출력 |
것>
<몸>
1 |
3
1 2 3
| 1 2 3 1 2 3 |
테이블>