【发布时间】:2018-05-26 18:17:16
【问题描述】:
我想从我的函数中返回一个多维 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的大小必须在编译时知道。这就是尺寸模板化的原因 -
为什么需要使用 std::array 作为返回类型而不是 std::vector?
-
@ F. Salido:对于类似 C 风格的数组,您可以执行以下操作: int[] foo() { // ... @N. Butterworth:如果我使用 std::vector,我将不得不使用嵌套的 for 循环使用 n^2 个元素初始化完整的对象——我努力省略这一点。 @乔治;如果没有比您迄今为止最好的解决方案更好的解决方案,我希望将它们视为能够将其标记为最佳解决方案的答案:-)
-
@user7427029
int[] foo()不会编译,int foo()[]也是如此。 -
@HolyBlackCat 我相信这是一个扩展.. 组织和返回编译时未知大小的多维数组的唯一方法是裸指针,或者是裸指针的包装类指针。向量可以充当替换,重新定义的迭代器可以允许模拟多维的技巧。
标签: c++ arrays c++11 multidimensional-array