gpt4 book ai didi

Java ArrayList 转换为 C++

转载 作者:行者123 更新时间:2023-11-30 02:00:09 25 4
gpt4 key购买 nike

我有一个 ArrayList

ArrayList[][] gridList = new ArrayList[300][150];
// Where a and b are some values in the range of the ArrayList.
ArrayList al = this.gridList[a][b];

如何将其翻译成 C++?我试过使用 std::vector 或 std::map、std::array。我只是无法让它工作。

ArrayList al = this.gridList[a][b];

那条线到底做了什么?

它是否创建了一个大小的数组??

ArrayList al = new ArrayList[a][b]

或者它可能将“a”和“b”的值复制到新的 ArrayList“al”中?

请帮忙

最佳答案

您的代码并没有按照您的想法行事。

 ArrayList[][] gridList = new ArrayList[300][150];

第一行分配一个 arrayarrayArrayList .

 ArrayList al = this.gridList[a][b];

第二行检索 ArrayList在偏移处 barray在偏移处 aarray网格列表。 您应该知道您的代码不会初始化任何一个数组

C++ 中的等效类型可能是:

#include <vector>
#include <array>

std::array< std::array< std::vector<T>, 150>, 300> gridList;

哪里T是 vector 中存储的元素的类型。请注意,泛型之前的 Java 只允许定义 ArrayList 而无需指定元素类型,这几乎就是您的代码所做的。在 C++ 中,此参数是必需的。上面的变量定义将为当前范围实例化它。你需要使用 new动态值的语句(如在 Java 中),并可能用智能指针包装它。

要访问网格的元素,您可以使用 []运算符(operator):

 vector v = gridList[a][b];

请注意,这将触发 vector 的完整拷贝网格中 < a,b > 位置的内容进入 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)。

关于Java ArrayList 转换为 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15442875/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com