C++ 迭代器中两个**的含义

C++ 迭代器中两个**的含义,c++,pointers,iterator,C++,Pointers,Iterator,在下面的代码段中 vector<SceneObject *> sceneObjs; vector<SceneObject *>::iterator iter; iter = sceneObjs.begin(); while (iter != sceneObjs.end()){ cout << **iter <<endl; iter++; } 矢量场景bjs; 向量:迭代器iter; iter=sceneObjs.begin(); whi

在下面的代码段中

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

iter = sceneObjs.begin();
while (iter != sceneObjs.end()){
  cout << **iter <<endl;
  iter++;
}
矢量场景bjs;
向量:迭代器iter;
iter=sceneObjs.begin();
while(iter!=sceneObjs.end()){

cout因为
*iter
是一个
场景对象*&
-一个
场景对象
指针
。你需要取消对它的引用,才能到达真正的
场景对象
,因为
*iter
返回一个
场景对象*
,然后第二个
*
将再次取消对它的引用*取消对迭代器的引用,给出一个
SceneObject*
指针。第二个*取消对
SceneObject*
指针的引用,指向
SceneObject本身。

第一个
*
返回迭代器中的值,即
SceneObject*
指针。第二个
*
延迟该指针,给出一个
ScEnObjult<代码>我怀疑有一个过载,因为<代码> SSH,不要告诉任何人,但是<代码> *ITER < /C>实际上是一个代码> ScEngult*& &代码>,但是它不会改变其余的He..r.MaTiHHOFNANDEANES。我对C++不太了解,但是我会把它加入到答案中,谢谢!@ CnCutar在这个例子中没有引用部分。任何差异。引用使得使用迭代器的代码可以更改迭代器的内容(迭代器的指针,而不是迭代器中指针指向的内存)。当您调用函数时,引用也很重要,函数本身采用
SceneObject*&
引用,因为此函数可以将*的内容替换为另一个值。当您有一个函数
void setNull(SceneObject*&obj){obj=NULL;}
时,调用
setNull(*iter);
将迭代器的内容设置为NULL。