Указатель на вектор вектора и итератор - PullRequest
1 голос
/ 26 января 2012

У меня есть вектор вектора моего объекта, и я получаю указатель на этот вектор. Моя проблема в том, что я не могу создать итератор с этим. Это мой код:

vector<vector<AbstractBlock*>> *vectorMap = _level->getMap()->getVectorMap();

for(vector<AbstractBlock*>::iterator i = vectorMap[colonneX-1].begin(); i < vectorMap[colonneX-1].end(); i++)
{
    /*some operations*/
}

Ошибка в vectorMap [colonneX-1] .begin (), если vectorMap не указатель, я могу сделать это

Как я могу это сделать?

Спасибо!

Ответы [ 3 ]

3 голосов
/ 26 января 2012

Разыменование vectorMap:

for(vector<AbstractBlock*>::iterator i = (*vectorMap)[colonneX-1].begin();
    i != (*vectorMap)[colonneX-1].end(); i++)
0 голосов
/ 26 января 2012

Вы ошиблись числом косвенности. Но может быть два разных правильных значения.

, если vectormap - указатель, vectormap[x] - это x-й vectormap в гипотетическом vector<vector<AbstractBlock*>> массиве.

Мне показалось странным, что вы имеете в виду, поскольку он не соответствует типу итератора.

Но *vectormap - это vector<vector<...>>, (*vectormap)[x] - это vector<AbstractBlock*>>, чей итератор, если дважды разыменовываться, это AbstractBlock.

Вы, скорее всего, имеете в виду

for(vector<AbstractBlock*>::iterator i = (*vectorMap)[colonneX-1].begin();
    i != (*vectorMap)[colonneX-1].end(); i++)
    (**i).abstractblock_methodcall();
0 голосов
/ 26 января 2012

vectorMap - это указатель на вектор, а не вектор.Это две разные вещи.Указатель просто ссылается на вектор, они не одно и то же.Вам нужно разыменовать vectorMap.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...