Динамическая инициализация двумерного массива списков в C ++ - PullRequest
0 голосов
/ 09 ноября 2018

Мне нужно инициировать 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])

Я мало занимаюсь С ++, поэтому не совсем понимаю, в чем дело. Как я могу сделать это правильно? Мне нужно получить доступ ко всем forward_list в O (1), и поэтому я бы предпочел массивы или вообще что-то быстрое.

Кстати: не уверен, если это называется динамической инициализацией, дайте мне знать, если я должен изменить заголовок.

Спасибо.

1 Ответ

0 голосов
/ 09 ноября 2018

A forward_list неспособно выполнить ваше требование к производительности: «Мне нужен доступ ко всем forward_list в O (1)», вы можете увидеть это в сравнении здесь: 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 из vector s не является отличным решением ; но вы можете посмотреть на это как на хорошее временное решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...