Доступ к вектору указателей? - PullRequest
1 голос
/ 11 февраля 2012

Я пытаюсь заставить простой код работать.У меня есть функция с именем 'get_object_radius', которая ищет в области экземпляры 'Существа' и помещает их указатели на вектор, а затем возвращает вектор.

Затем я хочу просмотреть их все и отобразить их именасо стороны функции.Я почти уверен, что правильно добавляю их к вектору, но я неправильно чередую вектор указателей, верно?

Вот соответствующий фрагмент кода (он не работает):

//'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;
}

Есть идеи, что я делаю не так?

Ответы [ 3 ]

4 голосов
/ 11 февраля 2012

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

Вы разыменовываете итератор, чтобы добраться до базового объекта.

cout << (*i)->name << endl;
1 голос
/ 11 февраля 2012

Попробуйте:

//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*.

0 голосов
/ 11 февраля 2012

Чтобы получить элемент, на который указывает итератор, вы разыменовываете его (как указатель, но итераторы не обязательно являются указателями).Поэтому ваш код должен выглядеть следующим образом:

// 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";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...