2010-11-07 4 views
1

Я изучаю, как работать с векторами в классе C++. Я столкнулся с проблемой, которая мешала мне использовать итераторы с векторами. Это мой исходный код:Как я могу увеличить векторный итератор?

template <class T> 
void HuffMan<T>::search_freq(T temp) { 
    //checks for frequency 
    if(objects.empty()){ 
    objects.push_back(temp); 
    return; 
} 

vector<T>::iterator it = objects.begin(); 

while(it != objects.end()) { 
    if(*it == temp) 
    cout<<"added aready\n"; 
    else 
    objects.push_back(temp); 

    //this is where the error occurs 
    //I cannot call 'it++' for some reason 
    it++; 
} 
} 

Этот код всегда возвращает ошибку во время выполнения программы, которая говорит "вектор итератор не incrementable. Я попытался изменить цикл while в цикл for, но я не думаю, что это связано с ошибкой.

Информация: Мой вектор объект объявлен следующим образом:

vector<T> objects; 

Может кто-нибудь помочь мне точку штырьковой этой ошибки?

Спасибо, Y_Y

+0

ли цикл, а содержащийся внутри метода Хаффмана класса ''? –

ответ

5

Вашей проблема заключается в том, что вы приращение после вызова push_back, который отменяет итератор.

Это признак более серьезной проблемы. Я предполагаю, что вы хотите протестировать temp против каждого элемента в vector и позвонить push_back, если совпадений нет, но вы на самом деле вызываете push_back для каждого элемента, который отличается.

! (Весь матч)! = Все (! Матч)

+0

LOL Я вижу свою ошибку .. спасибо ... –

+0

@Y_Y: Зайдите [этот вопрос] (http://stackoverflow.com/questions/4114503/) для получения дополнительной информации об аннулировании итератора. –

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