C++ 访问向量中的类
这个问题以前已经被问过很多次了,但我完全按照答案所说的去做,而且它们都给出了语法错误 我尝试了多种方法,这是我最后一次尝试C++ 访问向量中的类,c++,vector,C++,Vector,这个问题以前已经被问过很多次了,但我完全按照答案所说的去做,而且它们都给出了语法错误 我尝试了多种方法,这是我最后一次尝试 vector<Ent*>World; // other code here for( vector<Ent*>::iterator i = World.begin(); i != World.end(); ++i ) { World[i]->GetID(); } 矢量世界; //这里还有其他代码
vector<Ent*>World;
// other code here
for( vector<Ent*>::iterator i = World.begin();
i != World.end(); ++i )
{
World[i]->GetID();
}
矢量世界;
//这里还有其他代码
for(vector::iterator i=World.begin();
i!=World.end();++i)
{
World[i]->GetID();
}
语法错误
World[i]->GetID();
i
是迭代器,而不是整数索引
使用
对于向量,[]运算符是一个索引访问器,当您希望将元素作为索引(即数字)访问到容器中时,可以使用它,例如:
for( int i = 0;
i < World.size(); ++i )
{
World[i]->GetID();
}
for(int i=0;
iGetID();
}
另一方面,您正在使用迭代器。迭代器对象本身引用容器的元素,因此必须更改语法:
for( vector<Ent*>::iterator i = World.begin();
i != World.end(); ++i )
{
(*i)->GetID();
}
for(vector::iterator i=World.begin();
i!=World.end();++i)
{
(*i)->GetID();
}
请注意,迭代器为您提供了指向元素的类似指针的接口,这就是为什么您必须在访问成员之前先取消引用它(*i)。在C++11中,您可以执行for(auto-ent:World)ent->GetID()代码>
for( vector<Ent*>::iterator i = World.begin();
i != World.end(); ++i )
{
(*i)->GetID();
}