int [n] [m],其中n和m在运行时已知

问题描述 投票:4回答:3

我经常需要在编译时创建一个宽度和高度(让它们分别为n和m)未知的2D数组,通常我写:

vector<int> arr(n * m);

而且我用:]手动访问元素

arr[j * m + i] 

我最近被告知我可以改写:

int arr[n][m] // n and m still only known at runtime.

所以这是2个问题:

  1. C ++标准是否允许这种行为?
  2. 我应该如何将这样的数组传递给函数? g ++报告arr的类型为int (*)[n],但同样,n是动态的,并且在声明它的函数之外并不知道(main)。

我经常需要在编译时创建一个宽度和高度(让它们分别为n和m)未知的2D数组,通常我这样写:vector arr(n * m);我使用以下命令手动访问元素:arr [j * ...

c++ arrays multidimensional-array dynamic-arrays
3个回答
10
投票

您要查询的功能(仅在运行时才知道尺寸)是C ++的非标准扩展,而是C.99的标准扩展(在C.11中成为可选功能)。该功能称为variable-length array (VLA),链接是GCC的文档。


2
投票

为什么没有std::vectorstd::vector


0
投票

std::vectorstd::vector(来自#include <vector>)与二维数组具有相同的作用:

© www.soinside.com 2019 - 2024. All rights reserved.