如何在C++中创建动态数组的数组

3

我正在尝试学习C++并且正在尝试编写一个类似下面结构的简单哈希表的代码:

array[0][0] array[0][1] array[0][2]
key 1        value 1      value 2

array[1][0] array[1][1] 
key 2        value 3     

array[2][0] array[2][1] array[2][2]
key 3        value 4      value 5

意思是动态数组的数组。现在,我不知道如何定义这样的数组?

对此任何帮助将不胜感激。


2
std::vector<std::vector<int>> ? - P.P
4个回答

7
如果您真的需要创建动态数组的动态数组,您必须同时使用 new 关键字创建两个数组。例如:
// an array of int pointers... each points to the start of an array
int** arrays = new int*[10]; 
arrays[0] = new int[99]; // populate the first element of the array of arrays
arrays[1] = new int[47]; // arrays don't have to be the same size.

当然,我强烈建议不要这样做。你必须记得对arrays中的每个成员和arrays本身使用delete[]

实际上,你应该使用内置的std::vector类型来完成这个任务。这就是它存在的原因(我投票支持其他答案!)。

作为一个注释,这种方法也不会产生连续的内存空间。如果你确实希望成员数组具有相同的大小,你可以在for循环中分配它们的内存。


6

如果你使用C++,你需要使用std::vector<T>并嵌套两个向量来获得一个二维数组。

 std::vector<std::vector<my_type>> vec;
 std::vector<my_type> v;
 vec.push_back(v);
 v.push_back(mytype);

2
向量的向量并不完全是“2D数组”,因为它在内存中不是连续的。 - Kos

4
创建一个 vector <vector <T> >
例如:
vector <vector <string> > array;

vector <string> temp;
temp.push_back(key1);
temp.push_back(value1);
temp.push_back(value2);
array.push_back(temp);
.
.
.

0

这是老话题了,我相信我没有写出任何回答者不知道的东西,但OP看起来像是在做作业。我的作业要求我编写例程,而不使用任何STL资源。在这种情况下,唯一可能的答案是第一个。作业一开始并不关注效率,而是展示课程材料的使用。

不幸的是,很多时候他们想让你展示的东西在课程中从未被说明。这就使得像这样的OP需要在网络上搜索难以找到的参考资料。之所以难以找到,是因为没有人真正按照他们所要求的方式去做。

我点击了这个链接,因为标题让我相信我会找到一个静态数组的动态数组资源。所以我会发布那个应用程序,以防其他人也在寻找那个参考资料。

int main()
{

    int* time[2];

    int userInp;

    userInp = 5;

    time[0] = new int[userInp];

    time[0][1] = 6;

    cout << time[0][1];

    delete time[0];

    return 0;   
} 

你的回答中没有任何“静态(static)”的内容。你最初的整数指针数组是在“堆栈(stack)”上分配的,而不是静态分配的。此外,你不应该添加那些实际上并不是问题答案的回答(尽管你的意图是好的)。 - Dennis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接