2012-02-11 2 views
1

Я пытался решить эту проблему в течение нескольких часов, но я не знаю, как обойти это. У меня есть список значений в списке контейнера, как следующее:Ошибка выполнения: утверждение не выполнено, список Iterater не является неразрешимым

[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15] 

Я также создал еще один список указателей, указывающих на каждый 4-й элемент. Поэтому они указывают на следующее:

[0,4,8,12] 

У меня есть способ вернуть конец списка указателей. Как следующее:

int* end() {return *(pointerlist.end()) ;}; 

Это дает мне «Ошибка: Assertion Failed, Список Iterater не разыменовываемыми»

Я понимаю, что я ПОЛУЧАТЬ эту ошибку, потому что я пытаюсь выйти за пределы конца списка указателей, но мне бы хотелось иметь значение последнего элемента в этом списке. Я тоже пробовал делать следующее, но это только ухудшает ситуацию.

int* end() {return *(pointerlist.end() - 1) ;}; 

Есть ли у кого-нибудь идеи, как я могу получить последний элемент в списке указателей?

+1

Что вы имеете в виду "сделал вещи хуже"? Что случилось? –

+0

Когда я помещаю -1, я получаю около 20 ошибок, все выглядят так: Ошибка ошибка C2784: '_RanIt1 :: difference_type std :: operator - (std :: move_iterator <_RanIt> &, const std: : move_iterator <_RanIt2> &) ': не удалось вывести аргумент шаблона для' std :: move_iterator <_RanIt> & ' – SSS

ответ

1

Это следует сделать это:

int* end() { 
    assert(!pointerlist.empty()); 
    return pointerlist.back(); 
} 
+0

Awesome, Спасибо, что работает! Вы знаете, как я могу двигаться дальше от этого указателя? Например, прямо сейчас, он вернет 12, но знаете ли вы, как я могу заставить его продвигаться вперед к концу? (Значение будет 15) – SSS

+0

Просто увеличьте его! 'ptr = end(); ++ PTR; assert (* ptr == 13); ' –

Смежные вопросы