我有一个hashmap,其中包含struct Foo(不是指针)的项目。现在,我希望在列表中有这些项目的指针。我怎样才能做到这一点?
我试图迭代hashmap并将& * iter插入到列表中,但指针一旦超出范围就会失效。
我应该能够在没有动态分配的情况下做到这一点,不应该吗?
我喜欢这个并且不起作用: 对于(...) { 美孚和放大器; bar = * iter; list.insert(安培;巴); }
答案 0 :(得分:2)
当迭代器变为无效时,指向散列映射中的项的指针将变为无效。
如果你单独留下散列图(即在迭代它并获取其元素的地址后不插入/删除/复制/任何东西),你的指针应保持有效。
答案 1 :(得分:0)
我有一个包含项目的hashmap struct Foo(不是指针)。现在我 想要有这些项目的指针 在列表中。我怎么能这样做?
像这样:
typedef Whatever_Hash_Map<Foo> Container;
Container container;
...populate container...
std::list<Foo*> l;
for (Container::const_iterator i = container.begin(); i != container.end(); ++i)
l.insert(&*i);
...use list...
我试图迭代hashmap 并将&amp; * iter's插入列表中 但指针失效为 一旦他们超出范围。
如果您让任何超出范围,则无法使用此列表。如果你需要列表保持超过创建它的函数的返回,请确保在堆上分配列表本身并返回指向它的指针。
我应该可以不用这样做 动态分配,不应该吗?
列表动态分配节点。哈希映射可能在内部动态分配存储桶。但是,您不必动态地显式分配指向Foos的指针 - 所有标准容器和类似容器都会使用值语义将Foos复制到堆上(即Foo的复制构造函数或赋值运算符)。
我喜欢这个并且不起作用: for(...){Foo&amp; bar = * iter; list.insert(安培;巴); }
这本身看起来很好,错误在你的代码中的其他地方。这就是为什么你应该遵循詹姆斯的建议并发布足够的代码,我们可以指出你的错误。