gpt4 book ai didi

c++ - 为什么这两段代码给我不同的结果?

转载 作者:太空狗 更新时间:2023-10-29 23:52:15 25 4
gpt4 key购买 nike

我有一个对象 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 << " ";
}

据我所知,他们做同样的事情。谁能解释为什么第二个代码段不起作用?另外,有没有更好的方法来遍历我的列表?

最佳答案

I overloaded the bracket operators so that G[i] returns a list<int>

确保 operator [] 的返回类型是list<int>& , 不是 list<int> .否则,每次调用 G[2] 时都会在返回时创建一个拷贝。 , 所以 G[2].end()永远达不到。

如果调用 []一次,你在第一个代码片段中的方式 adj ,问题将不可见(尽管列表将被复制两次 - 一次在 return 中,另一次在赋值运算符中)。第二个片段通过调用 [] 暴露了问题。运算符多次。

关于c++ - 为什么这两段代码给我不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16619935/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com