如何从 STL 列表中的迭代器访问指向结构的指针而不是其元素
How do I access pointer to Structure instead of its elements from iterator in STL list
我有一个以下形式的结构
class THistory
{
/* */
public:
UInt32 userId;
UInt32 trip;
};
列表如下所示
THistory hist2;
std::list<THistory> temp;
std::list<THistory>::iterator it = temp.begin();
hist2.userId=userId;//passed by some function storing in tempory structure
hist2.trip=trip;//passed by some function storing in tempory structure
temp.push_back(hist2);//Pusing into list
我的问题是我可以访问
it->userId and
it->trip
但是我如何访问整个结构。我需要将整个结构指针传递给其他函数而不是单个元素。另外,上述方法在推送到列表之前使用临时结构来填充结构元素是否正确。
根据答案更新:我按如下方式传递迭代器
getLocations(&*it);
定义:
getLocations( THistory *hist){
////
}
我的代码构建,但它在运行时崩溃
"错误:迭代器是可推迟的"我进入函数内部,它命中库内部的列表函数调用并在此处崩溃
reference operator*() const
{ // return designated value
return ((reference)**(_Mybase *)this);
}
我越来越困惑了。希望这不是愚蠢的错误
若要获取结构,请在迭代器上使用取消引用运算符*
。并且要获取指向结构的指针,请使用地址运算符 &
.
所以例如 &*it
但是
(这非常重要(您应该首先检查迭代器是否实际引用了列表中的有效元素。在示例中显示代码的方式是,列表为空,temp.begin()
将返回temp.end()
迭代器,不应取消引用该迭代器。
但是我不明白为什么你需要一个指针,除非你需要调用的函数是由其他人编写的。如果您已经编写或可以重写函数,则将其更改为使用对结构的引用(或对常量的引用(,并且不需要使用指针。你真的应该尽可能避免在C++中使用指针。
至于将元素添加到列表中,那么您显示的内容应该可以正常工作。但是,如果您添加一个采用所需参数的构造函数,那么您不需要临时变量,并且可以例如
temp.push_back(THistory(userId, trip));
相关文章:
- 如何在 C# 中映射双 C 结构指针?
- 指针或结构的矢量
- MSVC将仅移动结构参数解释为指针
- 如何访问指针结构的成员变量?
- 如何将变量从变量传递到指针结构对象
- 如何在函数中检索指针结构
- C :变量的点地址至指针结构成员的地址
- C++指针结构不会被删除
- 初始化指针结构 - 内存中的外观
- C++指针结构和多线程
- c++中指针结构的运算符重载
- 为什么我不能转发声明指针结构?
- C# 如何定义新的指针结构
- 如何处理大型指针结构
- 我怎么能写一个函数的定义在模板类中声明返回指针结构对象
- 我如何编程指针结构或类变量在c++
- 具有指针结构的类所需的析构函数
- 为什么在非指针结构上进行类型转换会出现语法错误
- 语法:做binary_search (STL)排序向量的指针结构
- /a.检测到Glibc.out: munmap_chunk():无效指针- c++结构体的动态数组