C ++中列表的二维数组的动态初始化

时间:2018-11-09 17:37:58

标签: c++ arrays initialization

从输入读取大小后,我需要初始化一个2维数组的forward_list。

class Foo{

    forward_list<int> * koo;
    int A, B;

    void boo(){
        scanf("%d",&A);
        scanf("%d",&B);

        koo = new forward_list<int>[A][B];

        koo[0][0] = 1;
    }

};

编译器:

cannot convert ‘std::forward_list<int> (*)[1]’ to ‘std::forward_list<int>*’ in assignment adjList = new forward_list<int>[A][A];

CLion IDE:订阅的值不是数组(在koo [0]处)

我没有做太多的C ++,所以我不太清楚这是怎么回事。我该怎么做呢?我需要访问O(1)中的所有forward_list,因此,我更喜欢数组或通常比较快的东西。

顺便说一句:不确定是否将其称为动态初始化,请告诉我是否应该更改标题。

谢谢。

1 个答案:

答案 0 :(得分:0)

forward_list无法满足您的性能要求:“我需要访问O(1)中的所有forward_list”,可以在此处进行比较:https://en.wikipedia.org/wiki/Linked_list#Linked_lists_vs._dynamic_arrays您可以看到索引为forward_list和其他链接列表变体为 O(n)

提供所需的 O(1)索引的最简单的容器类型是vector或其他动态数组变体。我相信您可以通过以下方式满足您的当前需求:

vector<vector<int>> koo(A, vector<int>(B));

应该指出的是,尽管这将满足您的性能要求,a vector of vectors isn't a great solution;但您可以将其视为一个很好的权宜之计。