- 主题:[求助]一个迭代器问题
get_next中访问it->first会coredump,求助。
#include <stdio.h>
#include <iostream>
#include <unordered_map>
using namespace std;
void get_first(const unordered_map<int,int>& m,void** iter) {
auto it = m.begin();
*iter = (void*)⁢
}
void get_item(void* ptr, int &a,int &b) {
unordered_map<int,int>::iterator it = *(unordered_map<int,int>::iterator*)ptr;
a = it->first;
b = it->second;
}
void get_next(void* ptr) {
unordered_map<int,int>::iterator it = *(unordered_map<int,int>::iterator*)ptr;
++it;
printf("%d,%d\n",it->first,it->second);
}
int main(int argc, char** argv) {
unordered_map<int,int> m;
m.insert(make_pair(1,1));
m.insert(make_pair(2,2));
int a;
int b;
void* ptr;
get_first(m,&ptr);
get_item( ptr, a,b);
cout<<a<<" "<<b<<endl;
get_next(ptr);
return 0;
}
--
FROM 117.100.157.*
void get_first(const unordered_map<int,int>& m,void** iter) {
auto it = m.begin();
*iter = (void*)⁢
}
这个it是临时对象,返回它的地址是未定义行为
【 在 casbupt 的大作中提到: 】
: get_next中访问it->first会coredump,求助。
: #include <stdio.h>
: #include <iostream>
: ...................
--
FROM 39.190.138.*
有什么办法改一下吗? 想要做的是用C的方式去访问这个map
【 在 lcoudy 的大作中提到: 】
: void get_first(const unordered_map<int,int>& m,void** iter) {
: auto it = m.begin();
: *iter = (void*)⁢
: ...................
--
FROM 117.100.157.*
应该auto& it = begin().
【 在 lcoudy 的大作中提到: 】
: void get_first(const unordered_map<int,int>& m,void** iter) {
: auto it = m.begin();
: *iter = (void*)⁢
: ...................
--来自微水木3.5.1
--
FROM 42.234.93.*
这样是编译错误
【 在 txgx 的大作中提到: 】
: 应该auto& it = begin().
--
FROM 117.100.157.*
m.begin()
【 在 casbupt (想不上班有钱赚) 的大作中提到: 】
: 这样是编译错误
--
FROM 117.174.31.*
这个也有问题,begin返回的是迭代器,不是迭代器的引用
【 在 txgx (纸上谈医) 的大作中提到: 】
: 应该auto& it = begin().
: --来自微水木3.5.1
--
FROM 39.190.138.*
这个需要讨论一下。
两次m.begin()返回的迭代器地址不一样吗?
选代器也是堆栈变量?
【 在 lcoudy 的大作中提到: 】
: 这个也有问题,begin返回的是迭代器,不是迭代器的引用
: 【 在 txgx (纸上谈医) 的大作中提到: 】
: : 应该auto& it = begin().
: ...................
--来自微水木3.5.1
--
修改:txgx FROM 42.234.93.*
FROM 42.234.93.*
你在逗我吗?
【 在 txgx (纸上谈医) 的大作中提到: 】
: 应该auto& it = begin().
: --来自微水木3.5.1
--
FROM 76.126.252.*
为什么要用C的方式?
用C的方式为什么返回的东西还是个iterator类型相关的?
【 在 casbupt (想不上班有钱赚) 的大作中提到: 】
: 标 题: Re: [求助]一个迭代器问题
: 发信站: 水木社区 (Mon Feb 10 19:22:53 2020), 站内
:
: 有什么办法改一下吗? 想要做的是用C的方式去访问这个map
: 【 在 lcoudy 的大作中提到: 】
: : void get_first(const unordered_map<int,int>& m,void** iter) {
: : auto it = m.begin();
: : *iter = (void*)⁢
: : ...................
:
: --
:
: ※ 来源:·水木社区
http://www.newsmth.net·[FROM: 117.100.157.*]
--
FROM 76.126.252.*