如何从 STL 列表中的迭代器访问指向结构的指针而不是其元素

How do I access pointer to Structure instead of its elements from iterator in STL list

本文关键字:指针 结构 元素 访问 STL 列表 迭代器      更新时间:2023-10-16

我有一个以下形式的结构

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));