[C++] 동적할당을 써서 별찍기, 배수의 배열 그리고 배열범위 넓히기★

2022. 6. 7. 20:43코딩 1막 <C++개념편>/코딩 1막 <C++응용편>

728x90

1. <동적배열 써서 별찍기>

#include <iostream>

using namespace std;

void main()
{
	int input;
	cout << "크기를 입력 받으세요" << endl;

	cin >> input;

	int* arr = new int[input];

	for (int j = 1; j <= input; j++)
	{
		for (int i = 1; i <= j; i++)
		{
			arr[i] = i;
			cout << "*" ;
		}	
		cout << endl;
	}
}

출력 결과

2. <동적배열써서 배수의 배열만들기>

#include <iostream>

using namespace std ;


void main()
{
	int input;
	cout << "크기를 입력 받으세요" << endl ;
	cin >> input ;

	int* arr = new int[input] ;	

	for (int i = 1; i <= input; i++)
	{
		arr[i] = i * 5 ;
		cout  << arr[i] << endl ;
	}
	cout << endl;
	cout << arr[5] ;
}

출력 결과


★★★3. <배열의 최대범위를 넓히기>

#include <iostream>

using namespace std;

// 동적할당 : 사용자가 임의로 힙영역에서 메모리를 할당하는 것
void main()
{
	int currentSize = 5;	// 현재 담긴 사이즈
	int addSize = 5;		// 넘칠 시 추가할 사이즈
	int count = 0;
	int* arr = new int[currentSize];	// 5개만큼의 int 공간을 만들어 첫번째 주소를 arr포인터 변수에 넘겨준다

	while (1)
	{
		int input;
	
		cin >> input;

		if (input == -1)	// -1을 입력받으면 반복문 종료
		{
			break;
		}

		arr[count] = input;	// 입력받은 것을 배열에 넣어준다
		count++;			// 다음 인덱스에 넣기위해 count++
		if (count >= currentSize)	// 정해둔 크기를 넘어선다면
		{
			currentSize += addSize;	// 추가할 사이즈만큼 추가해주고
			int* temp = new int[currentSize];	//새로이 공간을 할당한다
			for (int i = 0; i < currentSize - addSize; i++)
			{
				temp[i] = arr[i];	// 새로운 공간에 기존에 내용물을 채워넣는다
			}
			delete[] arr;	// 이제 필요없는 공간을 날려버리고
			arr = temp;		// 새로운 공간을 가르키도록 한다.
		}
	}

	cout << "-----결과-----" << endl;
	for (int i = 0; i < count; i++)
	{
		cout << arr[i] << endl;
	}
}

출력 결과

* 차후에 배울 vector가 이런 구조를 가짐.

728x90