为什么我的向量在通过构造函数传递后会发生变化
How come my vector is changing after I pass it through a constructor?
如果你看一下输出,你可以看到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)
{}
相关文章:
- "error: no matching function for call to"构造函数错误
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 为什么在C++中使用私有复制构造函数与删除复制构造函数
- 选择要调用的构造函数
- 如何委托派生类使用其父构造函数?
- 构造函数正在调用一个使用当前类类型的函数
- 没有用于初始化C++中的变量模板的匹配构造函数
- 初始化具有非默认构造函数的std::数组项的更好方法
- 当从函数参数中的临时值调用复制构造函数时
- 在c++构造函数中使用随机字符串生成器
- 一对向量构造函数:初始值设定项列表与显式构造
- 从构造函数抛出异常时如何克服内存泄漏
- 我不明白为什么我声明一个空的内部结构并将其传递给构造函数
- 为什么使用默认构造函数"{}"而不是"= default"存在性能变化?
- 为什么我的向量在通过构造函数传递后会发生变化
- 为什么std::vector的构造函数接口在C++11中发生了变化
- 对象似乎正在删除自己,或者在构造函数之后内存发生了变化
- 理解构造函数定义块的语法变化