C++에서 new를 사용하여 2D 배열을 선언하는 방법
-
arr[x][y]
표기법을 사용하여 요소에 액세스하도록 2D 배열 선언 -
arr[]
표기법을 사용하여 요소에 액세스하도록 2D 배열 선언 -
vector
컨테이너를 사용하여 동적 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;
}
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