c++ - 从函数返回迭代器

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

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

最佳答案

您返回的迭代器指向传递给 myfind()mymap 的本地拷贝(当函数返回时被释放)。尝试:

mit myfind(mi &mymap) { ...

这将传递一个 referencemymap 并且没有复制。

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

相关文章:

c++ - SendInput() 发送 '[' 时按下开始按钮 ?? C++

c++ - 查找功能区按钮的窗口句柄

c++ - 在 C++ 中拆分空分隔字符串序列的简单方法

c++ - 是否需要显式构造 char 数组的每个成员?

c++ - 有什么理由使用 auto_ptr 吗?

c++ - 线段树标准模板库

c++ - 删除指针内存并确认

C++计算GFlops

c++ - 结构 tbb 与 atomic_ops 的内存对齐

c++ - 指针模板清除函数的 vector 无法编译并显示 "undefined reference"消息