use*_*029 6 c++ arrays multidimensional-array c++11
我想从我的函数返回一个多维 std::array 。返回数组的大小应由输入参数的大小确定。就像是:
std::array<std::array<unsigned int, n>, n> foo(std::vector<int> vec){
unsigned int n = vec.size;
std::array<std::array<unsigned int, n>, n> result;
return result;
}
Run Code Online (Sandbox Code Playgroud)
如果没有烦人的额外模板参数来解决这个问题,那就太好了。std::vector 而不是 std::array 似乎不像 std::array (没有显式初始化)那样直接使用 n (未确定的)项进行初始化。如何才能做到这一点?谢谢你!
您需要知道的第一件事是std::array它的大小在编译时固定,如cppreference 的文档所述:
std::array 是封装固定大小数组的容器。
该容器是一个聚合类型,其语义与将 C 样式数组 T[N] 作为其唯一非静态数据成员的结构体具有相同的语义。
如果n来自std::cin或来自命令行参数(或编译时之外的任何类型的输入),则编译器无法推断出类型,因此会抛出错误。
最明智的方法是使用std::vector,您可以这样做:
std::vector<std::vector<unsigned int>> foo(std::vector<int> vec){
unsigned int n = vec.size();
std::vector<std::vector<unsigned int>> result(n, std::vector<unsigned int>(n));
return result;
}
Run Code Online (Sandbox Code Playgroud)
只需使用向量的大小构造函数初始化每个向量即可。