返回未知大小的 std::array

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 (未确定的)项进行初始化。如何才能做到这一点?谢谢你!

Fra*_*ido 2

您需要知道的第一件事是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)

只需使用向量的大小构造函数初始化每个向量即可。