C++/C++ 기타

C++ 실행중에 이중배열 크기를 정의 하고 사용하는 한가지 방법

kimc 2021. 7. 2. 00:01

 

이번 글을 통해 배워갈 내용

  1.  C++로 동적으로 2중배열을 사용하는 방법

C++에서 배열을 컴파일 전에 코딩으로 크기 정하는건 간단합니다.

 

int myArray [5] = { 1, 2, 3, 4, 5 };  

 

위에 방법처럼 선언 및 정의를 해주면 됩니다.

 


그렇다면 런타임(프로그램 실행 중)에는 배열을 어떻게 관리해야 될까요?

 

저는 스택오버플로우에서 포인터를 통해 해답을 찾았습니다.

int** arr = new int* [x];     //x 는 행의 갯수
for(int i = 0; i < x; i++)
    arr[i] = new int[y];     //y는 열의 갯수
// 코드 참조 스택오버플로우

 

이중으로 포인터를 사용하였으며

포인터 0에 1, 2, 3, 이런식으로 배열을 넣고

포인터 1에 동일하게 넣어서

늘려가는 방식입니다.

 

 

스택오버플로우에서는

위에 방법과 함께

메모리를 더욱더 효율적으로 쓰는 두번째 방법을 제시합니다

 

int *ary = new int[SizeX*SizeY]
ary[i*SizeY+j]     // ary[i][j]

하지만 위에 방법은 가독성이 떨어져서 CPU 효율성을 높혀야 하는 경우가 아니라면

저는 첫번째 방법을 씁니다.

 

아래 코드는 제가 첫번째 방법으로 

2중 배열을 선언하고 사용한 전체 코드입니다.

 

 

#include <iostream>

using namespace std;

class CMy2DArray 
{ 
    private: 
    int ** my2DArray; 
    int sizeX;
    int sizeY;
    
    public: 
    CMy2DArray(); 
    ~CMy2DArray();
    void assignArraySize(int size);
    void fillArray(); 
    void displayArray(); 
};
//생성자
CMy2DArray::CMy2DArray()
{
    
}
// 소멸자
CMy2DArray::~CMy2DArray()
{
    // 메모리 관리
    for(int i = 0; i < sizeY; ++i) {
        delete [] my2DArray[i];
    }
    delete [] my2DArray;
} 

// 배열 생성성
void CMy2DArray::assignArraySize(int size)
{
    sizeX = size;
    sizeY = size;
    my2DArray = new int*[sizeY];
    for(int i = 0; i < sizeY; ++i) {
    my2DArray[i] = new int[sizeX];
    }
}

void  CMy2DArray::fillArray()
{
        for(int i=0;i<sizeY;i++)
    {
        for(int j=0;j<sizeX;j++)
        {
            my2DArray[i][j] = i+j;
        } 
    }
} 
void  CMy2DArray::displayArray()
{
        for(int i=0;i<sizeY;i++)
    {
        for(int j=0;j<sizeX;j++)
        {
            cout<<my2DArray[i][j] << " ";
        } 
        cout << endl;
    }
}

int main()
{
    int n;
    
    cin >> n;

    CMy2DArray* my2DArray = new CMy2DArray();
    my2DArray->assignArraySize(n);
    my2DArray->fillArray();
    my2DArray->displayArray();

    
    cout<<"Hello World";



    return 0;
}

 

입력

 

3


결과
0 1 2 

1 2 3 

2 3 4 

Hello World

 

 

오늘도 즐거운 코딩하시길 바랍니다 ~ :)

 

참조 및 인용

https://www.guru99.com/cpp-dynamic-array.html

 

C++ Dynamic Allocation of Arrays with Example

Details Last Updated: 28 June 2021 What is a Dynamic Array? A dynamic array is quite similar to a regular array, but its size is modifiable during program runtime. DynamArray elements occupy a contiguous block of memory. Once an array has been created, its

www.guru99.com

https://stackoverflow.com/questions/936687/how-do-i-declare-a-2d-array-in-c-using-new

 

How do I declare a 2d array in C++ using new?

How do i declare a 2d array using new? Like, for a "normal" array I would: int* ary = new int[Size] but int** ary = new int[sizeY][sizeX] a) doesn't work/compile and b) doesn't accomplish what...

stackoverflow.com

 

C++ Primer

728x90