c++ - 我的 vector 在通过构造函数传递后怎么会发生变化?

标签 c++ pointers vector

如果查看输出,您可以看到 listOrder 的内容,这些是正确的内容。但是,一旦我将它传递到我的图形构造函数并输出相同的列表,我就会出现乱码。我怀疑这与我的 Vertex* 内容的图形 adjacencyList 有关,但我不明白我的指针是如何困惑的。请帮助我将正确的节点放入图形 vector 中!

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 时,您都会返回 vector 的拷贝,因此迭代器不是来自同一个容器。

要么通过引用从 getOrder 返回 vector ,要么只调用一次 getOrder 来获取 vector 的拷贝,然后遍历它。

类似于:

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

关于c++ - 我的 vector 在通过构造函数传递后怎么会发生变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20672363/

相关文章:

c++ - 通过默认字符串简化 vector 中字符串的初始化

c++ - 如何找到将字符串转换为的正确数据类型?

c++ - 如何共享运营商返回的数据

C 指针(使用指针时 int 和 char 之间的区别),示例如下?

c - 指向链表指针的指针

c++ - 在 ClassB 中使用 ClassA 的枚举

c++ - 在 unordered_map Boost 中插入模板值时出错

c# - 使用C#/C++,是否可以限制网络流量?

c++ - 在什么实际情况下 bool(std::ifstream) != std::ifstream::good()?

c++ - 将 char* 转换为 int* C++