您的代码没有按照您的想法执行。
ArrayList[][] gridList = new ArrayList[300][150];
第一行分配了array
of array
。ArrayList
ArrayList al = this.gridList[a][b];
第二行检索gridList中ArrayList
at 偏移b
中的atarray
偏移。您应该知道您的代码不会初始化任何一个数组。a
array
C++ 中的等价类型可能是:
#include <vector>
#include <array>
std::array< std::array< std::vector<T>, 150>, 300> gridList;
其中T
是存储在向量中的元素的类型。请注意,泛型之前的 Java 只允许在不指定元素类型的情况下定义 ArrayList,这几乎就是您的代码所做的。在 C++ 中,此参数是必需的。上面的变量定义将为当前范围实例化它。您将需要对new
动态值使用语句(如在 Java 中),并可能用智能指针包装它。
要访问网格的元素,您可以使用[]
运算符:
vector v = gridList[a][b];
请注意,这将触发网vector
格中 <a,b> 位置处内容的完整副本 into v
。如建议的那样,一种更有效的方法是编写:
auto const &al = gridList[a][b];
同样,Java 使用的内存模型是非常动态的,因此如果您希望代码的行为更接近 Java 版本,您可能会有类似的内容:
#include<memory>
typedef std::vector<int> i_vector;
typedef std::shared_ptr<i_vector> i_vector_ptr;
typedef std::array< std::array< i_vector_ptr>, 150>, 300> vector_grid;
typedef std::shared_ptr<vector_grid> vector_grid_ptr;
vector_grid_ptr gridList;
i_vector_ptr al = (*gridList)[a][b];
类型T
为int
,并且网格类型的每个组件都明确定义。您仍然必须分配网格和每个元素(即i_vector
此处)。