Поэтому я ввел кучу строк в связанный список. Я стараюсь вводить эти узлы в вектор.
Но программа просто продолжала падать всякий раз, когда я пытаюсь нажать 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;
}
vector<Node> *vstring;
не инициализируется.
Пытаться
vector<Node> *vstring = new vector<Node>();
Прежде всего, как утверждают другие, у вас есть неинициализированный указатель.
Во-вторых, я не вижу веских оснований для написания:
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]
,