Re: вопрос про stl, vector::erase
От: BacCM Россия  
Дата: 17.01.05 09:30
Оценка:
Здравствуйте, BlackBox, Вы писали:

BB>Добрый день.


BB>Мне надо в цикле перебирать значения хранящиеся в векторе. При определенном условии я должен удалить текущее знаечение из вектора и продолжить обход.


BB>Сейчас сделал так:



BB>
BB>...
BB>table_iter_t it = table.begin();

BB>for (int i=0; it != table.end(); it++, i++)
BB>{
BB>...
BB>  if (cond)
BB>  {
BB>    table.erase(it);
BB>    i--;
BB>    it = table.begin()+i;
BB>    continue;
BB>  }
BB>...
BB>}
BB>


BB>Легальный ли это код или лучше сделать c remove+erase?


Не совсем если удалишь нулевой элемент потом i-- ...

BB>Заранее спасибо за ответы.


Должно работать:
table_iter_t it = table.begin();
while(it!=table.end){
  ...
  if (cond)
  {
        table.erase(it);
        //Значение итератора остается старым, но указывает на следующий элемент вектора
        continue;
    }
    ++it;
    ...

}
... << RSDN@Home 1.1.4 beta 3 rev. 241>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.