C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
STL: reverse_iterator, как сделать erase?
Asher
Отправлено: 19.06.2003, 16:33


Мастер участка

Группа: Модератор
Сообщений: 550



У меня в STL vector лежат указатели на объекты, при работе с конца вектора не могу удалить элементы
В модуле Unit1.h
CODE

#include <vector>
#include <algorithm>
using namespace std;
public:
vector<TObject*> PtrObjVector;

В модуле Unit1.cpp
CODE

__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
for (vector<TObject*>::reverse_iterator i1 = PtrObjVector.rbegin();
i1 != PtrObjVector.rend(); i1++)//По всем элементам вектора, начиная с конца{
 //Здесь в оригинале проверка, требует ли объект удаления
 //для простоты сейчас удаляем всех
 ...
 delete (*i1);              //Удаление объекта
 PtrObjVector.erase(i1);//Удалить элемент вектора <-- Это строка 17
}
}

Компилятор ругается так:
[C++ Error] Unit1.cpp(17): E2285 Could not find a match for 'vector>::erase(reverse_iterator)'

Как мне все-таки правильно удалять элементы вектора, если необходимо двигаться с конца?
Admin
Отправлено: 19.06.2003, 18:15


Владимир

Группа: Администратор
Сообщений: 1190



CODE


struct Valuta {    
 char CodeValut[5];       //  код валюты
 char NameValut[15];      //  название валюты
 double kursCB;           // курс ЦБ
 double kurs;
 }
vector <Valuta> val;
int num = 15;

val.erase(&val[num]);



Отредактировано Admin — 19 Jun 2003, 18:15
Asher
Отправлено: 19.06.2003, 18:59


Мастер участка

Группа: Модератор
Сообщений: 550



Это понятно, я пока так и сделал — просто цикл от PtrObjVector.size() до 0 и пользуясь таким доступом, все работает, но в книжке написано, что такой доступ противоречит идеологии STL cool.gif

P.S. Или податься в пофигисты — типа пофиг что противоречит biggrin.gif

Вернуться в Вопросы программирования в C++Builder