2012-01-25 3 views
1

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

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 не является указателем я могу это сделать

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

Спасибо!

+1

Поскольку 'vectorMap' является указателем,' vectorMap [colonneX-1] 'не использует' вектор <> ' 's' оператор [] ', это индексирование в указатель; try '(* vectorMap) [colonneX-1]'. Почему в любом случае вы используете так много указателей? Hideous ... – ildjarn

+0

Я предлагаю вам использовать больше ссылок и меньше указателей. – ypnos

ответ

3

разыменовывают vectorMap:

for(vector<AbstractBlock*>::iterator i = (*vectorMap)[colonneX-1].begin(); 
    i != (*vectorMap)[colonneX-1].end(); i++) 
+0

Ах, да, это отлично работает, я пробовал * (vectorMap), так что не работает – Guillaume

+0

оператор '[]' имеет более высокий приоритет, чем '*'. – hmjd

0

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

0

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

, если vectormap является указателем, vectormap[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

Спасибо за объяснение! – Guillaume