在引用中返回一个迭代器

时间:2016-11-14 03:08:02

标签: c++ algorithm vector iterator

我正在尝试在引用中返回一个迭代器

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);

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

vector<bar> copy = GetVecBar();

这将在您的函数中声明一个名为copy的本地对象。函数返回时会破坏此对象,就像函数作用域中的所有对象一样。

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

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

如果您的GetVecBar()被声明为返回vector<bar> &,那么这应该像

一样简单
vector<bar> &copy = GetVecBar();