首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在指针和引用之间转换

在指针和引用之间转换
EN

Stack Overflow用户
提问于 2013-03-18 09:59:51
回答 2查看 6.6K关注 0票数 3
代码语言:javascript
复制
std::list<Value> stdList;

stdList.push_back(Value());

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

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

有没有办法从指针创建迭代器,以便与erase()等std::list函数一起使用?我意识到泛型到特型(迭代器到指针)比其他方向更可行,但我想我还是要问一下。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-18 10:07:35

指针将指向存储在容器内的值。引用也做了同样的事情。

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

您尝试做的事情有时是使用vector完成的。之所以可以将vector数据元素指针转换为迭代器(数组索引),是因为您了解vector的结构。

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

代码语言:javascript
复制
Value& refval = *ptr;
票数 2
EN

Stack Overflow用户

发布于 2013-03-18 17:26:55

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15468691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档