gpt4 book ai didi

c++ - C++ 数组中的数组

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:15:24 28 4
gpt4 key购买 nike

希望你能帮助我。

假设我有两个矩阵数组:

int n1[3][3]={{2,7,3},{1,8,7},{5,6,2}};
int n2[3][3]={{4,5,8},{5,5,6},{2,6,2}};

然后我可以使用

调用其中之一
cout << n1[0][0] << endl;

当然会返回 2,但我想得到类似的东西

cout << n[1][0][0] << endl; // Returns 2
cout << n[2][0][0] << endl; // Returns 4

你能告诉我如何完成这项工作吗?

最佳答案

n定义为:

int n[2][3][3]= {
{{2,7,3},{1,8,7},{5,6,2}},
{{4,5,8},{5,5,6},{2,6,2}}
};

请注意,C++ 中的原始数组还不够好。最好使用 std::array:

std::array<std::array<std::array<int,3>,3>, 2>  n = {
{{2,7,3},{1,8,7},{5,6,2}},
{{4,5,8},{5,5,6},{2,6,2}}
};

嗯,这看起来很难看——使用 typedef(或别名)来简化语法:

 template<typename T, std::size_t M, std::size_t N, std::size_t P>
using array3d = std::array<std::array<std::array<T,P>,N>, M>;

然后将其用作:

array3d<int,2,3,3>  n = {
{{2,7,3},{1,8,7},{5,6,2}},
{{4,5,8},{5,5,6},{2,6,2}}
};

那更好。


您可以将别名概括为:

#include <array> 

template<typename T, std::size_t D, std::size_t ... Ds>
struct make_multi_array
: make_multi_array<typename make_multi_array<T,Ds...>::type, D> {};

template<typename T, std::size_t D>
struct make_multi_array<T,D> { using type = std::array<T, D>; };

template<typename T, std::size_t D, std::size_t ... Ds>
using multi_array = typename make_multi_array<T,D,Ds...>::type;

然后将其用作(阅读评论以便更好地理解):

 //same as std::array<int,10> 
//similar to int x[10]
multi_array<int,10> x;

//same as std::array<std::array<int,20>,10>
//similar to int y[10][20]
multi_array<int,10,20> y;

//same as std::array<std::array<std::array<int,30>,20>,10>
//similar to int z[10][20][30]
multi_array<int,10,20,30> z;

希望对您有所帮助。

关于c++ - C++ 数组中的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25592269/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com