C++에서 new를 사용하여 2D 배열을 선언하는 방법

Jinku Hu 2023년10월12일
  1. arr[x][y]표기법을 사용하여 요소에 액세스하도록 2D 배열 선언
  2. arr[]표기법을 사용하여 요소에 액세스하도록 2D 배열 선언
  3. vector컨테이너를 사용하여 동적 2D 배열을 암시 적으로 할당
C++에서 new를 사용하여 2D 배열을 선언하는 방법

이 기사에서는 new를 사용하여 동적으로 2D 배열을 선언하는 여러 C++ 메서드를 소개합니다.

arr[x][y]표기법을 사용하여 요소에 액세스하도록 2D 배열 선언

이 솔루션은[x][y]배열 표기법을 사용하여 생성 된 행렬 구조에 액세스 할 수 있도록new 키워드를 사용합니다. 처음에 정수 (int **) 변수에 대한 포인터를 선언하고 배열에 행 크기의 int 포인터 배열을 할당합니다. 다음으로이 포인터 배열을 반복하고 각 반복마다 열 크기의 int배열을 할당합니다. 마지막으로 2D 배열 작업이 완료되면 할당 된 메모리를 확보해야합니다. 할당 해제는 역순 루프에서 수행됩니다.

#include <iomanip>
#include <iostream>

using std::cin;
using std::cout;
using std::endl;
using std::setw;

constexpr int ROW = 4;
constexpr int COL = 6;

int main() {
  int **matrix = new int *[ROW];
  for (int i = 0; i < ROW; ++i) {
    matrix[i] = new int[COL];
  }

  for (int i = 0; i < ROW; ++i) {
    for (int j = 0; j < COL; ++j) {
      matrix[i][j] = rand() % 100;
      cout << setw(2) << matrix[i][j] << "; ";
    }
    cout << endl;
  }

  for (int i = 0; i < ROW; ++i) {
    delete matrix[i];
  }
  delete[] matrix;
  return EXIT_SUCCESS;
}

출력:

83; 86; 77; 15; 93; 35;
86; 92; 49; 21; 62; 27;
90; 59; 63; 26; 40; 26;
72; 36; 11; 68; 67; 29;

arr[]표기법을 사용하여 요소에 액세스하도록 2D 배열 선언

이 방법은 단일 배열 할당을 사용하므로 프로그램 실행 속도 측면에서보다 효율적인 방법입니다. 따라서 요소에 액세스하려면[]표기법과 산술을 사용해야합니다. 이 방법은 array 크기가 커지고 그 요소에 대한 계산이 상당히 집약적 일 때 권장되는 방법입니다. 이렇게하면 할당 해제가 더 쉬워집니다.

#include <iomanip>
#include <iostream>

using std::cin;
using std::cout;
using std::endl;
using std::setw;

constexpr int ROW = 4;
constexpr int COL = 6;

int main() {
  int *matrix = new int[ROW * COL];

  for (int i = 0; i < ROW; ++i) {
    for (int j = 0; j < COL; ++j) {
      matrix[j * ROW + i] = rand() % 100;
      cout << setw(2) << matrix[j * ROW + i] << "; ";
    }
    cout << endl;
  }
  delete[] matrix;

  return EXIT_SUCCESS;
}

vector컨테이너를 사용하여 동적 2D 배열을 암시 적으로 할당

또는 vector컨테이너를 사용하고 수동 메모리 할당/할당 해제없이 동적 2D 배열을 구성 할 수 있습니다. 이 예에서는 값이 0인 각 요소로 4x6 vector_2d배열을 초기화합니다. 이 방법의 가장 좋은 부분은 범위 기반 루프를 사용한 반복의 유연성입니다.

#include <iomanip>
#include <iostream>
#include <vector>

using std::cout;
using std::endl;
using std::setw;
using std::vector;

constexpr int ROW = 4;
constexpr int COL = 6;

int main() {
  vector<vector<int> > vector_2d(ROW, vector<int>(COL, 0));

  for (auto &item : vector_2d) {
    for (auto &item1 : item) {
      item1 = rand() % 100;
      cout << setw(2) << item1 << "; ";
    }
    cout << endl;
  }
  return EXIT_SUCCESS;
}
작가: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

관련 문장 - C++ Array