c++ - 返回引用中的迭代器

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

感谢帮助

最佳答案

vector<bar> copy = GetVecBar();

这声明了一个名为 copy 的本地对象在你的功能中。该对象在函数返回时被销毁,就像函数作用域中的所有对象一样。

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

不清楚是什么GetVecBar()来自显示的代码,但无论它是什么,您都需要更改代码以搜索实际 vector ,而不是它的拷贝。

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

vector<bar> &copy = GetVecBar();

关于c++ - 返回引用中的迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40581333/

相关文章:

c++ - 引用计数智能指针的赋值运算符

c++ - 找到 vector 中所有值之间的相似距离并将它们子集化

algorithm - 如何对数字数组进行排序以形成分散的数字?

opengl - 星表和天体坐标的可视化

c++ - 如何在类模板的构造函数中初始化 vector 成员变量

c++ - 搜索二叉树函数不起作用 c++

c++ - 我在将冲刺 Action 绑定(bind)到 Unreal 中的 shift 键时遇到问题

algorithm - 如何用trie(或后缀trie)生成所有回文子串?

python - 寻找欧拉之旅

math - 二维中两个向量的平分线(可能共线)