#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]로 접근하면 되죠

반응형