Как удалить из Vector ?
Как удалить из вектора элемент в любом месте?
При вызове функции удаления прога зависает.
Цитата:
Originally posted by ionn
Здравствуйте!
Как удалить из вектора элемент в любом месте?
При вызове функции удаления прога зависает.
Здравствуйте!
Как удалить из вектора элемент в любом месте?
При вызове функции удаления прога зависает.
Как удаляешь? Если через erase(iterator i) или
erase(iterator start, iterator end), то проверь
правильность итератор(а, ов).
И еще, что у тебя в векторе, в смысле тип данных?
Цитата:
Originally posted by Lerkin
Как удаляешь? Если через erase(iterator i) или
erase(iterator start, iterator end), то проверь
правильность итератор(а, ов).
И еще, что у тебя в векторе, в смысле тип данных?
Как удаляешь? Если через erase(iterator i) или
erase(iterator start, iterator end), то проверь
правильность итератор(а, ов).
И еще, что у тебя в векторе, в смысле тип данных?
struct sB
{
int....
float...
};
vector<sB*> vec;
В проге присваиваю sB *w=vec[какой-то];
Передаю в функцию удаления w
del(w);
void del(sB *b)
{
vector<sB*>::iterator where = find(vec.begin(), vec.end(), b);
vec.erase(where);//и тут она зависает
}
Как проверить правильность итератора?
#include <vector>
#include <iostream>
using namespace std;
struct sB {
float f;
int i;
};
vector<sB *> vec;
void del(sB *b);
void main(void)
{
sB *temp_sB;
for(register i=0;i<10;i++) {
temp_sB = new sB;
if(!temp_sB) return;
temp_sB->f = 0.00;
temp_sB->i = i;
vec.push_back(temp_sB);
}
// Чисто для проверки
vector<sB *>::iterator where = vec.begin();
for(register i=0;i<10;i++)
cout << where++ << "\t";
// Вот тут тонкий момент.
// Итератор конца указывает на следующий, после последнего, объект,
// т.е. фиг знает куда!
cout << endl << vec.begin() << "\t" << vec.end() << endl;
// Удалить все
for(register i=0;i<10;i++)
del(vec);
}
void del(sB *b)
{
// А здесь укажи диапазон вот так:
vector<sB *>::iterator where = find(vec.begin(), vec.end()-1, b);
// Тут, у меня, все работает.
vec.erase(where);
}
P.S. Проверь еще выделение памяти под объекты sB. Может лажа там...
Спасибо, все работает!