我有以下形式的结构
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);
}
我感到困惑。希望这不是愚蠢的错误
答案 0 :(得分:1)
要获取结构,请在迭代器上使用解除引用运算符*
。要获得指向结构的指针,请使用address-of运算符&
。
所以,例如&*it
但是 (这非常重要)您应首先检查迭代器是否实际引用了列表中的有效元素。在示例中显示代码的方式,列表为空,temp.begin()
将返回temp.end()
迭代器,不应取消引用。
但是我不明白为什么你需要一个指针,除非你需要调用的函数是由别人写的。如果您已编写,或者可以重写该函数,则将其更改为对结构使用引用(或对常量的引用),并且您不需要使用指针。你应该尽可能地避免在C ++中使用指针。
至于向列表添加元素,那么你展示的内容应该可以正常工作。但是如果你添加一个构造函数来获取所需的参数,那么你就不需要一个临时变量,并且可以这样做。
temp.push_back(THistory(userId, trip));