我有以下示例:
#include <stdio.h>
#include <map>
#include <conio.h>
typedef std::map<int,int> mi;
typedef std::map<int,int>::iterator mit;
mit myfind(mi mymap)
{
mit it = mymap.find(1);
printf("in function: %d\n",it->second);
return it;
}
void main()
{
mi a;
a.insert(std::pair<int,int>(1,2));
a.insert(std::pair<int,int>(3,4));
mit it = myfind(a);
printf("out of function: %d\n",it->second);
_getch();
}
输出是:
在函数中:2
功能失效:-17891602
为什么?迭代器是否无效?为什么?提前致谢。
最佳答案
您返回的迭代器指向传递给 myfind()
的 mymap
的本地拷贝(当函数返回时被释放)。尝试:
mit myfind(mi &mymap) { ...
这将传递一个 reference 到 mymap
并且没有复制。
关于c++ - 从函数返回迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4734129/