std::list<Value> stdList;
stdList.push_back(Value());
Value * ptr = &stdList.back(); // <-- what will this address point to?如果我采用back()返回的引用并将其隐式转换为不太通用的Value *,它是指向列表的最后一个值,还是指向某个意外的地方?
有没有办法从指针创建迭代器,以便与erase()等std::list函数一起使用?我意识到泛型到特型(迭代器到指针)比其他方向更可行,但我想我还是要问一下。
发布于 2013-03-18 10:07:35
指针将指向存储在容器内的值。引用也做了同样的事情。
您不能直接将该指针转换为列表迭代器,因为您已经丢失了有关周围结构的所有信息。要做到这一点,你必须聪明地使用list::find。
您尝试做的事情有时是使用vector完成的。之所以可以将vector数据元素指针转换为迭代器(数组索引),是因为您了解vector的结构。
请注意,list::back()不返回迭代器。它返回一个引用。这两个是完全不同的。你在想list::end()吗?或者你真的把迭代器和引用搞混了?因为您可以从指针获取引用。你可以这样做:
Value& refval = *ptr;发布于 2013-03-18 17:26:55
是的,指针指向列表中存储的最后一个值。
我们不能从指针创建迭代器,迭代器是容器的一个概念(这里是列表),迭代器并不关心列表中存储了什么类型的值。引用和指针是存储在列表中的值的句柄,它们可以互换,我们可以将引用转换为指针,反之亦然。
https://stackoverflow.com/questions/15468691
复制相似问题