산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> C 언어

예제를 사용한 C++ 배열 동적 할당

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

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

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

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

이 C++ 튜토리얼에서 배우게 될 것입니다.

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

어레이의 초기 크기와 성장 요인에 따라 성능이 결정됩니다. 다음 사항에 유의하십시오.

  1. 배열의 크기와 성장 요인이 작은 경우 계속해서 메모리를 더 자주 재할당합니다. 이렇게 하면 어레이의 성능이 저하됩니다.
  2. 배열의 크기가 크고 성장 요인이 크면 사용하지 않는 메모리가 엄청나게 많습니다. 이로 인해 크기 조정 작업이 더 오래 걸릴 수 있습니다. 이렇게 하면 어레이의 성능이 저하됩니다.

새 키워드

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

구문:

새 키워드는 다음 구문을 사용합니다.

pointer_variable = new data_type;

pointer_variable은 포인터 변수의 이름입니다.

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. 콘솔에 일부 텍스트를 인쇄합니다. endl은 끝줄을 의미하는 C++ 키워드입니다. 커서를 다음 문장으로 이동합니다.
  7. for 루프를 사용하여 배열 요소를 반복합니다.
  8. 콘솔에 array라는 이름의 배열 내용을 인쇄합니다.
  9. for 루프 본문의 끝입니다.
  10. 프로그램은 성공적으로 완료되면 값을 반환해야 합니다.
  11. main() 함수 본문의 끝

배열 크기 조정

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

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

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

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

동적으로 배열 삭제

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

참고:

컴퓨터 메모리에서 동적 배열을 삭제하려면 delete 대신 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를 사용하여 배열의 내용을 반복합니다.
  14. 배열 arr의 값을 콘솔에 출력합니다.
  15. for 루프 본문의 끝입니다.
  16. 콘솔에 빈 줄을 인쇄합니다.
  17. 배열의 메모리를 확보합니다.
  18. 프로그램이 성공적으로 완료되면 값을 반환합니다.
  19. main() 함수 본문의 끝

요약:


C 언어

  1. C# 배열
  2. C++ 프로그래밍에서 함수에 배열 전달
  3. C 동적 메모리 할당
  4. C++의 배열 | 선언 | 초기화 | 배열 예제에 대한 포인터
  5. 예제가 있는 C++의 연산자:정의, 유형 및 프로그램
  6. EXAMPLE이 있는 C++ Switch Case 문
  7. 예제가 있는 C++ 구조체
  8. 예제가 있는 C++의 std::list
  9. 구조체와 클래스의 차이점:C++ 예제로 설명
  10. 예제가 있는 Java 프로그램의 선택 정렬