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
P.S. Или податься в пофигисты — типа пофиг что противоречит
|
|