Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как удалить из Vector ?

3.0K
05 апреля 2003 года
ionn
6 / / 28.03.2003
Здравствуйте!
Как удалить из вектора элемент в любом месте?
При вызове функции удаления прога зависает.
9
06 апреля 2003 года
Lerkin
3.0K / / 25.03.2003
Цитата:
Originally posted by ionn
Здравствуйте!
Как удалить из вектора элемент в любом месте?
При вызове функции удаления прога зависает.



Как удаляешь? Если через erase(iterator i) или
erase(iterator start, iterator end), то проверь
правильность итератор(а, ов).

И еще, что у тебя в векторе, в смысле тип данных?

3.0K
07 апреля 2003 года
ionn
6 / / 28.03.2003
Цитата:
Originally posted by Lerkin


Как удаляешь? Если через 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);//и тут она зависает
}

Как проверить правильность итератора?

9
07 апреля 2003 года
Lerkin
3.0K / / 25.03.2003
Посмотри, может я смысл не уловил...

#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. Может лажа там...
3.0K
08 апреля 2003 года
ionn
6 / / 28.03.2003
Спасибо, все работает!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог