我正在尝试在引用中返回一个迭代器
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(); });
}
这有效但当它返回main时,迭代器指向随机的东西。
主要:
vector<bar>::iterator iterBar;
Object.foo(false, iterBar);
感谢您的帮助
答案 0 :(得分:1)
vector<bar> copy = GetVecBar();
这将在您的函数中声明一个名为copy
的本地对象。函数返回时会破坏此对象,就像函数作用域中的所有对象一样。
然后该函数返回一个迭代器,引用该向量中的某个值。但是,由于向量本身被破坏,当函数返回时,迭代器引用一个被破坏的对象,因此你看到了结果。
目前尚不清楚显示的代码中GetVecBar()
是什么,但不管它是什么,您需要更改代码以搜索实际的矢量,而不是它的副本。
如果您的GetVecBar()
被声明为返回vector<bar> &
,那么这应该像
vector<bar> © = GetVecBar();