#include <bits/stdc++.h>
using namespace std;
struct Vec3
{
int x, y, z;
Vec3(int x = 0, int y = 0, int z = 0) noexcept : x(x), y(y), z(z) { }
friend std::ostream& operator<<(std::ostream& os, const Vec3& v)
{
return os << '{' << "x:" << v.x << " y:" << v.y << " z:" << v.z << '}';
}
};
int main() {
int row = 4;
int col = 5;
unique_ptr<unique_ptr<Vec3[]>[]> arr = make_unique<unique_ptr<Vec3[]>[]>(row);
for (int i = 0; i < row; ++i)
arr[i] = make_unique<Vec3[]>(col);
for (int i = 0; i < row; ++i)
for (int j = 0; j < col; ++j)
arr[i][j].x = i*col + j;
for (int i = 0; i < row; ++i) {
for (int j = 0; j < col; ++j)
cout << arr[i][j] << ' ';
cout << '\n';
}
return 0;
}
std::unique_ptr
템플릿 매개변수에다 int[]
이런식으로 배열 타입을 넣어서 1차원 배열을 만들 수 있습니다.
std::make_unique
로 n차원 배열을 만들려면 Ragged array 만들 때처럼 하는 방법밖에 없는 듯 합니다.
흐음... 불편합니다.
저같으면 그냥 1차원으로 선언한 다음 인덱스로 요리조리 잘라서 쓸 듯 합니다.
M행 N열을 가진 배열을 만들려면 A[M*N]으로 만들고, A[i][j] = A[i*N + j]로 접근하면 되죠
반응형
'프로그래밍 > C++' 카테고리의 다른 글
C++ RAII (Resource Acquisition is initialization) (0) | 2020.07.26 |
---|---|
C++ std::thread (0) | 2020.07.25 |
C++11 implicit narrowing conversion (축소 변환) 방지하는 법 (0) | 2020.06.23 |
C++ 배열의 값이 전부 같은지 확인하는 방법 (std::equal) (0) | 2020.06.20 |
intrinsic popcount, clz, ctz (gcc, msvc) (2) | 2020.06.09 |