为什么我的向量在通过构造函数传递后会发生变化

How come my vector is changing after I pass it through a constructor?

本文关键字:变化 构造函数 向量 我的 为什么      更新时间:2023-10-16

如果你看一下输出,你可以看到listOrder的内容是什么,这些是正确的内容。但是,一旦我将其传递到我的图形构造函数中并输出相同的列表,我就会乱七八糟。我怀疑这与我的图形邻接列表的顶点*内容有关,但我不明白我的指针是如何混乱的。请帮助我将正确的节点放入图形向量中!

for (vector<char>::iterator it=listOrder.begin(); it!=listOrder.end(); ++it)
{
    cout << "ListNode: " << *it << endl;
}
Graph graph(listOrder, adjacencyList);
for (vector<char>::iterator it=graph.getOrder().begin(); it!=graph.getOrder().end(); ++it)
{
    cout << "Node: " << *it << endl;
}

构造 函数

Graph::Graph(vector<char> newVertices, map<char, Vertex*> newAL)
{
vertices = newVertices;
adjacencyList = newAL;
}

获取顺序函数

vector<char> Graph::getOrder()
{
return vertices;
}

输出

ListNode: A
ListNode: B
ListNode: C
ListNode: D
ListNode: E
ListNode: F
ListNode: G
Node: ░
Node: ↨
Node: >
Node:
Node: ─
Node:
Node: >
每次

调用 getOrder 时都会返回向量的副本,因此迭代器不来自同一个容器。

要么通过引用从getOrder返回向量,要么只调用getOrder一次以获取向量的副本,然后遍历该副本。

像这样:

vector<char> v(graph.getOrder());
for (vector<char>::iterator it=v.begin(); it!=v.end(); ++it)
{
    cout << "Node: " << *it << endl;
}

我建议使用基于范围的for。 它将帮助您避免遇到的一些问题。

您的 getOrder 函数在每次调用时都返回不同的向量,这意味着您无法有效地将迭代器从一个调用与另一个调用进行比较。

如果你重新设计你的代码,它是这样的:

for (auto &it : listOrder)
{
    cout << "ListNode: " << it << endl;
}
Graph graph(listOrder, adjacencyList);
for (auto &it : graph.getOrder())
{
    cout << "Node: " << it << endl;
}

它将有更好的工作机会。

使用复制构造函数初始化类模因

Graph::Graph(vector<char> newVertices, map<char, Vertex*> newAL)
: vertices(newVertices)
, adjacencyList(newAL)
{}