попытка вставить узел в вектор & lt; node & gt; но программа продолжает падать при push_back

Поэтому я ввел кучу строк в связанный список. Я стараюсь вводить эти узлы в вектор.
Но программа просто продолжала падать всякий раз, когда я пытаюсь нажать push_back. Вот мой код У меня есть два класса, узел и куча.

heap h;
vector<Node> *vstring;

Попробовав решение Дениса, я смог решить проблему. Однако у меня есть другая проблема. Чтобы проверить, действительно ли содержимое находится в векторе

for(int i = 0; i < size; i++)
{
cout << "content is " << h[i] << endl;
}

Я получаю следующую ошибку.
ошибка: нет совпадения для оператора ‘<<‘(типы операндов:’ std :: ostream {aka std :: basic_ostream} ‘и’ std :: vector ‘)
соиЬ << *час << епсИ;
^
В классе узла у меня есть << оператор перегружен.

ostream& operator<<(ostream& out, const Node &n)
{
cout << "in operator " << endl;
out<<n.data;
return out;
}

0

Решение

vector<Node> *vstring;

не инициализируется.
Пытаться

vector<Node> *vstring = new vector<Node>();
1

Другие решения

Прежде всего, как утверждают другие, у вас есть неинициализированный указатель.

Во-вторых, я не вижу веских оснований для написания:

std::vector<Node> *vstring;

вместо:

std::vector<Node> vstring;

Векторная реализация будет динамически распределять свой контент, поэтому вам не нужно беспокоиться о его размере. Если вы хотите создать массив векторов, используйте std::vector<std::vector<Node>> vstring и получать и [i, j] Элемент будет так же, как в случае массивов — vstring[i][j],

При прохождении h как std::vector<Node> *, h это не vector это указатель Итак, используя h[i] вы получаете i-й вектор под указателем h, Ошибка, которую вы видели, говорила вам об этом —

оператор<<‘(типы операндов:’ std :: ostream {aka std :: basic_ostream} ‘и «Станд :: вектор») кут << *час << епсИ;

Это означает, что аргумент оператора << это вектор (в вашем случае cout << "content is " <<Привет]<< endl;

Если вы хотите получить элемент вектора под указателем h ты должен сделать h->at(i) (или же (*h)[i]).

Также было бы лучше использовать ссылки вместо указателей, например:

void heap::getData(std::vector<Node> &h, int size, Node* temp);

Так что не было бы никаких проблем с h[i],

0

По вопросам рекламы [email protected]