0

所以我将一堆字符串输入到链表中。我倾向于尝试将这些节点输入到向量中。但是每当我尝试 push_back 时,程序就会一直崩溃。这是我的代码。我有两个类,节点和堆。

heap h;
    vector<Node> *vstring;

在尝试了丹尼斯的解决方案后,我能够解决这个问题。但是我遇到了另一个问题。测试内容是否真的在向量中

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

我收到以下错误。错误:'operator<<' 不匹配(操作数类型是 'std::ostream {aka std::basic_ostream}' 和 'std::vector') cout << *h << endl; ^ 在节点类中,我确实重载了 << 运算符。

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

2 回答 2

1
vector<Node> *vstring; 

未初始化。尝试

vector<Node> *vstring = new vector<Node>();
于 2014-11-04T11:03:20.200 回答
0

首先,正如其他人所说,您有未初始化的指针。

其次,我没有看到写作的充分理由:

std::vector<Node> *vstring;

代替:

std::vector<Node> vstring;

Vector 实现会动态分配它的内容,所以你不必关心它的大小。如果你想创建一个向量数组,使用std::vector<std::vector<Node>> vstring和获取和[i, j]元素就像在数组的情况下一样 - vstring[i][j]

当传递has时std::vector<Node> *h它不是vector一个指针。因此,使用h[i]您将在 pointer 下获得第 i 个向量h。你看到的错误告诉你 -

operator<<' (操作数类型是 'std::ostream {aka std::basic_ostream}' 和'std::vector') cout << *h << endl;

这意味着 operator 的参数<<是一个向量(在你的情况下是cout << "content is " <<h[i]<< endl;

如果你想在指针下获取向量的元素,h你应该做h->at(i)(或(*h)[i])。

此外,最好使用引用而不是指针,如下所示:

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

所以不会有问题h[i]

于 2014-11-04T15:26:33.583 回答