解除引用迭代器时这是否有效

时间:2013-01-09 16:39:30

标签: c++ c++11 iterator deque

 for (auto iter = dlQueue.cbegin(); iter != dlQueue.cend(); ++iter)     
        {
                // reference to the current element in the container
                if (*iter.id == listid)
                {
                        *iter.stall = newstall & 0xFFFFFFF;
                }
        }

当我取消引用它引用的对象时,我能够检查对象的状态;即身份证。或者这只会给我一个迭代器作为回报。

我不能去:

iter -> id

DlQueue是一个出队。

3 个答案:

答案 0 :(得分:2)

不,你引用的代码是错误的。

.的优先级高于一元*。要访问iter引用的元素的成员,您应该写(*iter).iditer->id,而不是*iter.id

答案 1 :(得分:0)

你尝试过吗?如果您遇到编译错误,请告诉我们它是什么。 此外,查看dlQueue的类型非常有用。

(*iter).iditer->id都应该导致对的 const引用(假设dlQueue包含一个名为id的可访问成员的对象。您无法分配给const引用,但这与您选择的*iter.iter->无关。


如果您需要修改您正在迭代的项目,请使用begin代替cbegin等。

for (auto iter = dlQueue.begin(); iter != dlQueue.end(); ++iter)

答案 2 :(得分:0)

我修复了代码中的明显错误:

 for (auto iter = dlQueue.begin(); iter != dlQueue.end(); ++iter) {
   // if the id matches:
   if (iter->id == listid) {
     // assign to stall a bitmasked version of newstall:
     iter->stall = newstall & 0xFFFFFFF;
   }
 }

有帮助吗?