从函数返回迭代器

时间:2011-01-19 10:26:21

标签: c++ stl

我有以下示例:

#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

为什么呢?迭代器是否无效?为什么?提前谢谢。

2 个答案:

答案 0 :(得分:8)

您返回的迭代器指向传递到mymap的{​​{1}}的本地副本(在函数返回时取消分配)。尝试:

myfind()

这会将引用传递给mit myfind(mi &mymap) { ... ,并且不会复制。

答案 1 :(得分:1)

您按值传递地图。因此,myfind()对映射的副本进行操作,迭代器仅对副本有效。改为通过引用传递地图。