参考

2016-11-14 79 views
0

返回一个迭代我试图在参考参考

void class::foo(vector<bar>::iterator& iterBar) 
{ 
    vector<bar> copy = GetVecBar(); 
    iterBar = min_element(copy.begin(), copy.end(), [](const bar& a, const bar& b) { return a.GetInt() < b.GetInt(); }); 
} 

这工作,但,当它返回到主,迭代器指向的东西随机返回一个迭代。

在主:

vector<bar>::iterator iterBar; 
Object.foo(false, iterBar); 

感谢您的帮助

+2

'iterBar'只是垂下;它指向容器'copy'中的元素,它在离开函数'foo'时被销毁。 – songyuanyao

回答

1
vector<bar> copy = GetVecBar(); 

这声明命名你的函数copy本地对象。这个对象在函数返回时被破坏,就像函数作用域中的所有对象一样。

函数然后返回一个迭代器,引用这个向量中的某个值。然而,由于矢量本身被破坏,当函数返回时,迭代器引用一个被破坏的对象,因此你看到的结果。

不清楚GetVecBar()是从哪个代码显示的,但不管它是什么,您需要更改代码以搜索实际的矢量,而不是其副本。

如果您GetVecBar()声明为返回一个vector<bar> &,那么这应该是越简单

vector<bar> &copy = GetVecBar();