【问题标题】:Return an iterator in reference返回引用中的迭代器
【发布时间】:2016-11-14 03:08:01
【问题描述】:

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

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

感谢您的帮助

【问题讨论】:

  • iterBar 只是悬空;它指向容器copy中的元素,该元素在退出函数foo时已被销毁。

标签: c++ algorithm vector iterator


【解决方案1】:
vector<bar> copy = GetVecBar();

这会在您的函数中声明一个名为 copy 的本地对象。这个对象在函数返回时被销毁,就像函数范围内的所有对象一样。

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

从显示的代码中不清楚GetVecBar() 是什么,但无论它是什么,您都需要更改代码以搜索实际向量,而不是它的副本。

如果您的GetVecBar() 被声明为返回vector&lt;bar&gt; &amp;,那么这应该很简单

vector<bar> &copy = GetVecBar();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-09
    • 2017-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-15
    • 1970-01-01
    相关资源
    最近更新 更多