如何在STL列表

时间:2016-02-14 14:26:37

标签: c++ list stl iterator

我有以下形式的结构

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){
    ////
}

我的代码构建但是,它在运行时崩溃

“错误:Iterator是deferencable”我在函数内部进行操作,它命中列表函数调用库内部并在此处崩溃

reference operator*() const
    {   // return designated value
    return ((reference)**(_Mybase *)this);
    }

我感到困惑。希望这不是愚蠢的错误

1 个答案:

答案 0 :(得分:1)

要获取结构,请在迭代器上使用解除引用运算符*。要获得指向结构的指针,请使用address-of运算符&

所以,例如&*it

但是 (这非常重要)您应首先检查迭代器是否实际引用了列表中的有效元素。在示例中显示代码的方式,列表为空,temp.begin()将返回temp.end()迭代器,不应取消引用。

但是我不明白为什么你需要一个指针,除非你需要调用的函数是由别人写的。如果您已编写,或者可以重写该函数,则将其更改为对结构使用引用(或对常量的引用),并且您不需要使用指针。你应该尽可能地避免在C ++中使用指针。

至于向列表添加元素,那么你展示的内容应该可以正常工作。但是如果你添加一个构造函数来获取所需的参数,那么你就不需要一个临时变量,并且可以这样做。

temp.push_back(THistory(userId, trip));