3
std::list<Value> stdList;

stdList.push_back(Value());

Value * ptr = &stdList.back(); // <-- what will this address point to?

如果我采用返回的引用back()并将其隐式转换为较不通用的Value *,它会指向列表的最后一个值,还是会指向意外的地方?

有没有办法从指针创建一个迭代器,用于 std::list 函数,例如erase()?我意识到从通用到特定(迭代器到指针)比往另一个方向更可行,但我想我还是会问。

4

2 回答 2

2

指针将指向存储在容器内的值。参考做了同样的事情。

您不能直接将该指针转换为列表迭代器,因为您已经丢失了有关周围结构的所有信息。要做到这一点,您必须对list::find.

您尝试执行的操作有时是使用vector. 您可以将vector数据元素指针转换为迭代器(数组索引)的原因是您知道 a 的结构vector

请注意,list::back()返回迭代器。它返回一个引用。两者完全不同。你在想list::end()吗?还是您真的对迭代器和引用感到困惑?因为您可以从指针中获取引用。你这样做:

Value& refval = *ptr;
于 2013-03-18T02:07:35.453 回答
1

是的,指针指向存储在列表中的最后一个值。

我们不能从指针创建迭代器,迭代器是容器的概念(这里是列表),迭代器不关心列表中存储了什么样的值。引用和指针是存储在列表中的值的句柄,它们可以互换,我们可以将引用转换为指针,反之亦然。

于 2013-03-18T09:26:54.870 回答