@yacsha가 게시됨에 따라 원시 포인터와 new
(또는 심지어 포인터)을 사용하는 대신 <vector>
을 STL에서 사용하는 것이 좋습니다.
그러나, 당신은, 당신은, 제대로 변수를 선언 할당해야 원하는 것을 정말 인 '3 차원 INT'를 만드는 경우, 다음 삭제 :
#include <iostream>
int main()
{
int b, c, d;
std::cin >> b >> c >> d;
// declaring a variable to a pointer that points to a pointer ... etc.
// really hard to maintain and read
int*** a = new int**[b];
for (int i = 0; i < b; ++i) {
a[i] = new int*[c];
for (int j = 0; j < c; j++) {
a[i][j] = new int[d];
for (int k = 0; k < d; k++)
std::cin >> a[i][j][k];
}
}
// using it like a normal 3d array would be used
for (int i = 0; i < b; i++) {
for (int j = 0; j < c; j++) {
for (int k = 0; k < d; k++)
std::cout << a[i][j][k] << ' ';
std::cout << '\n';
}
std::cout << '\n';
}
// deleting is necessary after using them
for (int i = 0; i < b; i++)
for (int j = 0; j < c; j++)
delete[] a[i][j];
for (int i = 0; i < b; i++)
delete[] a[i];
delete[] a;
}
당신이 볼 수 있듯이, 이것은 악몽 유지하다. 컨테이너가 메모리 할당을 처리하기 때문에 <vector>
을 사용하는 것이 훨씬 더 쉽습니다. STL을 사용하지 않으려면 b
, c
, d
이 const
/constexpr
인 최소한 a[b][c][d]
을 사용하십시오.
이것은 <vector>
와 같은 모습입니다 : 당신이 너무 복잡 선언 발견하고 차원 배열을 초기화하기, 또는 루프를 통해 크기를 조정할 수 있다면 당신은 typedef
/using
std::vector
을 단축 할 수
#include <iostream>
#include <vector>
int main()
{
int b, c, d;
std::cin >> b >> c >> d;
std::vector<std::vector<std::vector<int>>> threeDim(b, std::vector<std::vector<int>>(c, std::vector<int>(d, 0)));
for (const auto x : threeDim) {
for (const auto y : x) {
for (const auto z : y)
std::cout << z << ' ';
std::cout << '\n';
}
std::cout << '\n';
}
}
.
일반적으로 1 차원 배열에 의해 지원되는 전용 클래스를 사용하는 것이 좋습니다. "어리석은 행렬"을 찾은 다음 코드를 3D로 확장합니다. – o11c