对迭代器解引用时是否有效?

Is this valid when dereferencing an iterator

本文关键字:是否 有效 引用 迭代器      更新时间:2023-10-16
 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。还是返回给我一个迭代器。

我不能去:

iter -> id

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

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

你试过了吗?如果你有一个编译错误,请告诉我们是什么。另外,看看dlQueue的类型也会很有帮助。

(*iter).iditer->id都应该导致对id的const引用(假设dlQueue持有具有可访问成员id的对象)。不能给const引用赋值,但这与*iter.iter->的选择无关。


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

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

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

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

有帮助吗?