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