固定長多次元配列のラッパ
std::array<std::array<T, M>, N> も std::vector<std::array<T, M> > も, &a[i][j] == &a[0][0] + i * M + j が成立するという意味での連続性が保証されるか分かったもんじゃないですねかわいい
2011-09-12 10:24:33 via web
https://gist.github.com/1222262
#include "multi_array.hpp" int main() { uni::multi_array<int, 3, 2> a = { { { 1, 2 }, { 3, 4 }, { 5, 6 } } }; a[0][0] = 7; // 普通にアクセス uni::multi_array<int, 2> a0 = a[0]; // 子配列をコピー for (int i : a.flatten()) std::cout << i; // 配列を 'ならす' }
Variadic Templates を使って可変次元に対応しつつ,プリプロセッサを最後まで避けえたことが個人的満足ポイント.
*1:保証できそうな感じはしますが,配列以外にメンバを持つかも,処理系が末尾に要らんパディングを入れるかも,と言われたらそんな気もする