R.W*_*ner 6 c++ arrays multidimensional-array c++11
例如,包含三个整数的一维阵列可以定义为std::array<int, 3> myarray或myarray[3].是否有类似std::array<type, size>多维数组的容器myarray[3][3]?
一个关键的部分是确保{}初始化的工作原理std::array,并保持自己像pod一样合理.兼容性std::array也很重要,什么比一个更兼容std::array?所以我的解决方案从std::arrays 生成多维数组:
template<class T, size_t... sizes>
struct multi_array_helper {
using type=T;
};
template<class T, size_t... sizes>
using multi_array = typename multi_array_helper<T, sizes...>::type;
template<class T, size_t s0, size_t... sizes>
struct multi_array_helper<T, s0, sizes...> {
using type=std::array<multi_array<T, sizes...>, s0>;
};
Run Code Online (Sandbox Code Playgroud)
示例语法:
multi_array<int, 2,2> arr = {{ {{0,1}}, {{2,3}} }};
static_assert( std::is_same< multi_array<int,2,2>, std::array<std::array<int,2>,2> >{}, "see, just arrays under the hood" );
Run Code Online (Sandbox Code Playgroud)
稍微优化可能涉及折叠整个数组层次结构,如果任何维度为0,但我不确定.
A multi_array<int>是一个int旁边(ints的零维数组),因为它有意义,并且因为它使代码更简单.
这是旧版本.
这应该有效:
template<typename T, std::size_t Size, std::size_t ...Sizes>
struct MultiArray : public std::array<MultiArray<T, Sizes...>, Size>
{
};
template<typename T, std::size_t Size>
struct MultiArray<T, Size> : public std::array<T, Size>
{
};
int main()
{
MultiArray<int, 3, 6, 8> ma;
std::cout << ma.size() << std::endl;
std::cout << ma[0].size() << std::endl;
std::cout << ma[0][0].size() << std::endl;
ma[2][1][6] = 4;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1317 次 |
| 最近记录: |