【问题标题】:the meaninings of two ** for an iterator两个**对于迭代器的含义
【发布时间】:2011-10-12 14:21:05
【问题描述】:

在下面的代码段中

vector<SceneObject *> sceneObjs;
vector<SceneObject *>::iterator iter;

iter = sceneObjs.begin();
while (iter != sceneObjs.end()){
  cout << **iter <<endl;
  iter++;
}

为什么 **iter 有两个 *s ?

【问题讨论】:

    标签: c++ pointers iterator


    【解决方案1】:

    第一个 * 取消对迭代器的引用,给出一个 SceneObject * 指针。第二个 * 取消引用这个 SceneObject * 指向 SceneObject 本身的指针。

    【讨论】:

      【解决方案2】:

      因为*iterSceneObject *&amp; - SceneObject 指针。您需要取消引用它才能获得真正的SceneObject

      【讨论】:

      • ssh,不要告诉任何人,但*iter实际上是一个SceneObject*&amp;,但它并没有改变这里的其余部分。
      • @R.MartinhoFernandes 我真的不太了解 C++,但我会将其合并到答案中,谢谢!
      • @cnicutar 在这种情况下,参考零件没有任何区别。该引用使使用迭代器的代码可以更改迭代器的内容(迭代器的指针,而不是迭代器内部指针指向的内存)。当您调用一个函数时,该引用也很重要,该函数本身采用SceneObject*&amp; 引用,因为该函数可以将 *it 的内容替换为另一个值。当你有一个函数void setNull(SceneObject*&amp; obj){obj=NULL;} 时,调用setNull(*iter); 将迭代器的内容设置为NULL。
      【解决方案3】:

      因为*iter 返回一个SceneObject*,然后第二个* 将再次取消引用。

      【讨论】:

        【解决方案4】:

        第一个* 返回迭代器中的值,一个SceneObject* 指针。第二个* 引用该指针,给出SceneObject。我怀疑&lt;&lt; 的过载将 SceneObject` 渲染为流。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-10-05
          • 2013-04-12
          • 1970-01-01
          • 2010-09-17
          • 1970-01-01
          • 1970-01-01
          • 2023-03-07
          相关资源
          最近更新 更多