跟是不是指针没有关系。
既然容器将迭代器用指针实现,楼主的代码一样会挂。
【 在 MyWorkLife (我是谁) 的大作中提到: 】
: 标 题: Re: [求助]一个迭代器问题
: 发信站: 水木社区 (Tue Feb 11 11:01:55 2020), 站内
:
: 迭代器只是语义上像指针
: 实现上可差远了,一般表现为一个类对象
: 一个危险且肮脏的做法是
: void * dst = new char[sizeof(xxx::iterator)];
: memcpy(dst, &it, sizeof(xxx::iterator));
: *iter = dst; // 别忘了delete
:
: 【 在 casbupt (想不上班有钱赚) 的大作中提到: 】
: : 标 题: [求助]一个迭代器问题
: : 发信站: 水木社区 (Mon Feb 10 18:51:17 2020), 站内
: :
: : 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;
: : }
: : --
: :
: : ※ 来源:·水木社区
http://www.newsmth.net·[FROM: 117.100.157.*]
:
:
: --
:
: ※ 来源:·水木社区 newsmth.net·[FROM: 223.72.95.*]
--
FROM 76.126.252.*