std::list<Value> stdList;
stdList.push_back(Value());
Value * ptr = &stdList.back(); // <-- what will this address point to?
如果我接受back()
返回的引用并隐式将其转换为不太通用的Value *
,它是指向列表的最后一个值,还是指向某个意外的位置?
有没有办法从指针创建迭代器,以便与erase()
等std :: list函数一起使用?我认识到特定的泛型(迭代器到指针)比走向另一个方向更可行,但我想我还是会问。
答案 0 :(得分:2)
指针将指向存储在容器内的值。引用做了同样的事情。
您无法直接将该指针转换为列表迭代器,因为您丢失了有关周围结构的所有信息。要做到这一点,你必须聪明地使用list::find
。
您尝试执行此操作有时是使用vector
完成的。您可以将vector
数据元素指针转换为迭代器(数组索引)的原因是因为您知道vector
的结构。
请注意list::back()
不返回迭代器。它返回一个引用。两者完全不同。你在想list::end()
吗?或者你真的在迭代器和引用之间混淆了吗?因为可以从指针获取引用。你这样做:
Value& refval = *ptr;
答案 1 :(得分:1)
是,指针指向列表中存储的最后一个值。
我们不能从指针创建迭代器,迭代器是容器的概念(此处列表),而迭代器不关心列表中存储的值是什么类型。 引用和指针是存储在列表中的值的句柄,它们是可互换的,我们可以将引用转换为指针,反之亦然。