在向量中访问 类

Accessing classes in vectors

这个问题已经问过很多次了,但是我完全按照答案说的去做,而且都是语法错误。

我尝试了多种方法,这只是我尝试的最后一种方法。

vector<Ent*>World;
// other code here
for( vector<Ent*>::iterator i = World.begin();
        i != World.end(); ++i )
    {
        World[i]->GetID();
    }

语法错误。

World[i]->GetID();

i 是迭代器,不是整数索引。

使用

(*i)->GetID();

对于向量,[] 运算符是一个索引访问器,当您想要将元素作为索引(即数字)访问到容器中时使用,例如:

for( int i = 0;
    i < World.size(); ++i )
{
    World[i]->GetID();
}

另一方面,您正在使用迭代器。迭代器对象本身引用容器的元素,所以你必须改变你的语法:

for( vector<Ent*>::iterator i = World.begin();
    i != World.end(); ++i )
{
    (*i)->GetID();
}

请注意,迭代器为您提供了指向元素的类似指针的接口,这就是为什么您必须先取消引用它 (*i) 才能访问该成员。