그것은 인해 타입 시스템의 제한으로 직접 원하는 일을 할 확실히 불가능합니다,하지만 당신은 (C++ 11 구문) 다음과 같은 것을 고려할 수 있습니다 :이를 얻을 수
#include <vector>
#include <array>
#include <iostream>
template <typename T, size_t x, size_t z>
struct Ragged : std::array<std::vector<std::array<T, z>>, x> {
Ragged(size_t y) {
for (auto &i : *this) {
i.resize(y);
}
}
};
int main() {
using R5y5 = Ragged<int, 5, 5>;
R5y5 a(3), b(4), c(2);
vector<R5y5> d{a, b, c};
d[1][1][2][3] = 99; // checked at() calls supported for all dimensions, too
for (auto const &d : D) {
for (auto const &x : d) {
std::cout << "[";
for (auto const &y : x) {
std::cout << "[";
for (auto const &z : y) {
std::cout << z << " ";
}
std::cout << "]";
}
std::cout << "]" << std::endl;
}
std::cout << std::endl;
}
}
을 다차원 operator[]
은 d
및 그 요소에 액세스 할 수 있으며 y
치수의 배열을 d
안에 넣을 수 있습니다. 3 차원 의사 어레이는 더 이상 완전히 컴팩트하게 저장되지 않지만 잠재적으로 성장할 수있는 2 차원 슬라이스에 저장됩니다.
다른 유형의 집합이 아닌 한 유형의 배열 만 만들 수 있습니다. – Deduplicator
@Deduplicator : 여기서 중요한 통찰력은 C 및 C++에서 배열의 크기가 그 유형의 일부라는 것입니다. –
void * 및 캐스팅 배열을 사용하기 전에 저장합니다. – BLUEPIXY