声明多维 std::array 的不那么冗长的方法
简短的问题:有没有更短的方法来做到这一点
Short question: Is there a shorter way to do this
array<array<atomic<int>,n>,m> matrix;
我希望像
array< atomic< int>,n,m> matrix;
但它不起作用...
推荐答案
嵌套时,std::array 会变得非常难以阅读并且变得冗长.维度的相反顺序可能特别令人困惑.
When nested, std::array can become very hard to read and unnecessarily verbose. The opposite ordering of the dimensions can be especially confusing.
例如:
std::array < std::array <int, 3 > , 5 > arr1;
对比
char c_arr [5][3];
另外,注意当你嵌套 std::array 时,begin()、end() 和 size() 都返回无意义的值.
Also, note that begin(), end() and size() all return meaningless values when you nest std::array.
出于这些原因,我创建了自己的固定大小的多维数组容器,array_2d 和 array_3d.他们的优势是可以使用 C++98.
For these reasons I've created my own fixed size multidimensional array containers, array_2d and array_3d. They have the advantage that they work with C++98.
它们类似于 std::array,但适用于 2 维和 3 维多维数组.它们比内置多维数组更安全,性能也不差.我没有包含维度大于 3 的多维数组的容器,因为它们不常见.在 C++11 中,可以制作支持任意维数的可变参数模板版本(类似于 Michael Price 的示例).
They are analogous to std::array but for multidimensional arrays of 2 and 3 dimensions. They are safer and have no worse performance than built-in multidimensional arrays. I didn't include a container for multidimensional arrays with dimensions greater than 3 as they are uncommon. In C++11 a variadic template version could be made which supports an arbitrary number of dimensions (Something like Michael Price's example).
二维变体的一个例子:
//Create an array 3 x 5 (Notice the extra pair of braces)
fsma::array_2d <double, 3, 5> my2darr = {{
{ 32.19, 47.29, 31.99, 19.11, 11.19},
{ 11.29, 22.49, 33.47, 17.29, 5.01 },
{ 41.97, 22.09, 9.76, 22.55, 6.22 }
}};
此处提供完整文档:http://fsma.googlecode.com/files/fsma.html
您可以在此处下载库:http://fsma.googlecode.com/files/fsma.zip
相关文章