我有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 << " ";
}
Run Code Online (Sandbox Code Playgroud)
这不起作用......
for(list<int>::iterator it = G[2].begin(); it != G[2].end(); it++) {
cout << *it << " ";
}
Run Code Online (Sandbox Code Playgroud)
据我所见,他们做同样的事情.任何人都可以解释为什么第二个代码段不起作用?另外,有没有更好的方法迭代我的列表?
我重载了括号运算符,以便
G[i]返回一个list<int>
请确保您的返回类型operator []是list<int>&,没有list<int>.否则,每次通话时都会在返回时创建副本G[2],因此G[2].end()永远不会到达.
如果你调用[]一次,就像在第一个代码片段中所做的那样adj,问题将不可见(尽管列表将被复制两次 - 一次复制,一次复制return到赋值运算符中).第二个片段通过[]多次调用运算符来暴露问题.