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

表示动态数组的数组。现在,我不明白如何定义这样的数组?

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

4

4 回答 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.

当然,我强烈建议不要这样做。然后,您必须记住delete[]在每个成员上使用arrays以及在arrays其自身上使用。

真的,您应该为此使用内置std::vector类型。这就是它存在的原因(我投票支持其他答案!)。

请注意,这也不是连续的内存。此外,如果您确实希望成员数组的大小相同,则可以在for循环中分配它们的内存。

于 2012-11-02T09:36:26.093 回答
6

在 C++ 中,您将使用 astd::vector<T> 并嵌套其中两个以获得 2D 数组。

 std::vector<std::vector<my_type>> vec;
 std::vector<my_type> v;
 vec.push_back(v);
 v.push_back(mytype);
于 2012-11-02T08:59:11.867 回答
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);
.
.
.
于 2012-11-02T08:59:06.300 回答
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;   
} 
于 2014-02-08T16:02:59.753 回答