Ваш код не делает то, что вы думаете.
ArrayList[][] gridList = new ArrayList[300][150];
Эта первая линия выделяет из array
array
из ArrayList
.
ArrayList al = this.gridList[a][b];
Эта вторая линия извлекает ArrayList
по смещению b
в array
по смещению a
в array
gridList. Вы должны знать, что ваш код не инициализирует ни массивы.
Эквивалентный тип в 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
в сетке в положении < а, Ь> в 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
здесь).
Пожалуйста, попытайтесь держать свои сообщения на один вопрос - вы спрашиваете, как перевести 'ArrayList' на C++, или то, что' ArrayList al = this.gridList [a] [b]; 'делает? –
@PhilipKendall OP хочет знать, как перевести двухмерный массив класса Java 'ArrayList' на C++. –
У вас нет списка массивов. У вас есть массив массивов ArrayList. т. е. у вас есть 300 * 150 ссылок на ArrayList (все являются нулевыми). a и b позволяют получить один из этих рефеек, тот, который находится в координатах a, b в матрице ArrayLists. новый ArrayList [a] [b] создает новый массив (длины a) или массивы (длины b) ArrayList. –