參考

2016-11-14 78 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();