为什么这两段代码给我不同的结果?
Why do these two segments of code give me different results?
我有一个对象G
,它是一个图。我重载括号操作符,使G[i]
返回list<int>
(STL列表),这是顶点i
的邻接列表。
我有这两段代码,它们都应该迭代G[i]
,但只有第一个工作。
list<int> adj = G[2];
for(list<int>::iterator it = adj.begin(); it != adj.end(); it++) {
cout << *it << " ";
}
for(list<int>::iterator it = G[2].begin(); it != G[2].end(); it++) {
cout << *it << " ";
}
在我看来,他们做同样的事情。谁能解释为什么第二个代码段不工作?还有,有没有更好的方法来遍历我的列表?
我重载了括号操作符,使
G[i]
返回list<int>
确保您的operator []
的返回类型是list<int>&
,而不是list<int>
。否则,每次调用G[2]
都会在返回时创建一个副本,因此G[2].end()
永远不会到达。
如果您调用[]
一次,您在第一个代码片段中使用adj
的方式,问题将不可见(尽管列表将被复制两次-一次在return
中,一次在赋值操作符中)。第二个片段通过多次调用[]
操作符暴露了问题。
也许Graph::opertor[]
每次都返回一个新的list
,所以你不能比较不同列表之间的迭代器
list<int> adj = G[2];
list<int>::iterator end = adj.end();
for(list<int>::iterator it = adj.begin(); it != end; ++it) {
cout << *it << " ";
}
相关文章:
- 这两个代码片段相似,但显示的结果不同
- 为什么第二个代码给出了预期的结果,而第一个代码却没有?
- RapidXML - 代码创建意外结果
- 代码未在联机编译器上显示结果
- 为什么这两段使用 constexpr、__PRETTY_FUNCTION__ 和 char * 的代码有不同的结果?
- C++位移位在相反方向上具有相同的常量,结果不同,代码更改很小
- 我的代码厨师提交显示错误的结果
- 如何查找导致结果不一致的代码
- 如何使用 c++ 将股票代码的结果添加到 poloniex 中的数组中?
- 我无法弄清楚我的代码未显示预期结果的问题
- 为什么这段代码(在 Matlab 的 MEX 文件中使用 OpenMP)给出不同的结果?
- 为什么这两个相似的代码计算行列式的结果不同?
- 为什么这个C++程序在代码::块和在线 IDE 之间返回不同的结果?
- C++:汇编代码包含断言结果
- 有人可以解释一下'sizeof'在此代码中返回的结果吗
- 相同的代码在联机 IDE 和本地 IDE 中给出不同的结果
- 来自 open() 的返回结果代码之间的差异:25 与 3
- 我不小心没有使用std::ref——结果代码做了什么?
- Typename给出了奇怪的输入结果代码块
- 用c++运行一个进程,过滤输出,获取结果代码,同时获取系统错误