访问指针的矢量

Accessing Vector of Pointers?

本文关键字:指针 访问      更新时间:2023-10-16

我正在尝试使用一些简单的代码。我有一个名为"get_object_radius"的函数,它在一个区域中搜索"Creature"的实例,并将它们的指针推到一个向量,然后返回向量。

然后我想循环浏览它们,并在函数外显示它们的名称。我很确定我把它们正确地添加到向量中,但我没有正确地循环指针的向量,是吗?

以下是相关的代码片段(不起作用):

//'get_object_radius' returns a vector of all 'Creatures' within a radius
vector<Creature*> region = get_object_radius(xpos,ypos,radius);
//I want to go through the retrieved vector and displays all the 'Creature' names
for (vector<Creature*>::iterator i = region.begin(); i != region.end(); ++i) {
    cout<< region[i]->name << endl;
}

你知道我做错了什么吗?

http://www.cplusplus.com/reference/stl/vector/begin/

您可以取消引用迭代器以访问底层对象。

cout << (*i)->name << endl;

尝试:

//I want to go through the retrieved vector and displays all the 'Creature' names
for (vector<Creature*>::iterator i = region.begin(); i != region.end(); ++i) {
    cout << (*i)->name << endl;
}

您需要取消对迭代器的引用(使用*运算符),然后迭代器将为您提供Creature*指针。

要获取迭代器所指向的元素,可以取消对它的引用(就像指针一样,但迭代器不一定是指针)。所以你的代码应该是这样的:

// auto is C++11 feature
for (auto it = region.begin(); it != region.end(); ++it) {
    Creature *p = *it;
    std::cout << p->name << "n";
}

在C++11中,您还可以获得的范围,它在您的视图中隐藏迭代器:

for (Creature *p : region) {
    std::cout << p->name << "n";
}