返回 std::未知大小的数组
Return std::array of unknown size
我想从我的函数返回一个多维的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;
}
在没有烦人的附加模板参数的情况下解决这个问题会很好。 std::vector 而不是 std::array 似乎不像 std::array 那样使用 n(未确定)项进行初始化(没有显式初始化)。这怎么可能呢?谢谢!
您需要知道的第一件事是std::array
在编译时固定了其大小,正如 cppreference sais 中的文档:
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;
}
只需使用向量的大小构造函数初始化每个向量。
您可以使用其 c'tor 创建一个大小为n
大小的std::vector
的n
大小的std::vector
,即:
std::vector<std::vector<unsigned int>> result(n, std::vector<unsigned int>(n, 0));
注意:根据 cppreference.com,上面std::vector
s c'tor 示例中使用的第二个参数是要创建的每个项目的值:c'tor 签名:
vector( size_type count, const T& value, const Allocator& alloc = Allocator());
.
尝试使用 Boost.MultiArray。它允许您创建具有任意内容类型内容的多维数组。我已经使用了它(更具体的是 boost::multi_array_ref 部分),它的效果非常好。一个重要的功能是能够创建数组视图(以及基于视图的切片)。
- C++未知长度字符串的数组,其行为类似于 Python 字符串列表
- C++中数组大小未知的指针转换
- 如何定义在编译时数据未知的 const 数组
- 在C++中初始化第一维大小未知的二维数组
- 在带有模板的函数中传递未知大小的 std::数组.如何更正此代码?
- 你能让数组中的项数未知吗
- 当数组大小在C++中未知时,如何在运行时将对字符串数组的引用作为函数参数传递?
- 如何将输入到具有未知数量元素的数组中?
- 获取由空格分隔的未知大小的单行输入,并将其存储到整数数组中
- 使用 ReadProcessMemory() 将未知大小的字符数组或字符串读入 wstring 中
- 未知容器、向量或数组 c++ 的大小
- 未知大小的数组作为类成员,用于在运行时(对象创建时间)创建数组的对象
- 构造函数初始化器列表中未知长度的数组
- 在 c++ 中使用未知元素初始化的字符数组
- 特征:将数组映射到矩阵大小未知的矩阵
- 如何声明一个未知大小的数组,然后输入直到我想要,然后获取数组的大小
- 如何在 C++ 中将值附加到未知大小的数组中
- 如何确定未知类型数组的索引是否为空
- 使用数组和布尔值在输出未知时从输出中删除逗号
- 如何正确写入多维字符数组未知数量的值,但固定的字符堆