迭代器只是语义上像指针
实现上可差远了,一般表现为一个类对象
一个危险且肮脏的做法是
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.*]
--
FROM 223.72.95.*