C ++: трудности с удалением элемента из вектора - PullRequest
0 голосов
/ 07 июля 2010

Я пытаюсь удалить элемент из вектора.

vector<Foo> vecFoo;

Foo f1;
Foo f2;
Foo f3;

vecFoo.push_back(f1);
vecFoo.push_back(f2);
vecFoo.push_back(f3);

Foo* pF1 = &f1;

vecFoo.erase(std::remove(vecFoo.begin(), vecFoo.end(), *pF1), vecFoo.end());

Последняя строка выдает огромное количество ошибок C2784. Что я делаю не так?

(Да, этот пример немного надуман, но суть в том, что у меня есть указатель на элемент в векторе, и я хочу удалить этот элемент.)

Ответы [ 3 ]

2 голосов
/ 07 июля 2010

Вам не хватает оператора сравнения?

class Foo
{
    public:
        bool operator==(Foo const& rhs) const { return true;}

        ... Other stuff
};
0 голосов
/ 07 июля 2010

Вы перегружены Foo х operator==?

Имеет ли Foo нетривиальный деструктор, оператор присваивания или конструктор копирования, но не все три? Если вы определите один, вы должны определить их всех.

Даже если вы не перегружены деструктором, оператором присваивания или конструктором копирования, один из вас Foo объявил приватным свой деструктор или оператор присваивания или конструктор копирования.

0 голосов
/ 07 июля 2010

У вас нет указателя на элемент, потому что push_back делает копию.Вы можете исправить это с помощью Foo* pF1 = &vecFoo[0];

Предполагая, что это просто опечатка, вы можете получить итератор для элемента очень просто, поскольку векторные итераторы имеют произвольный доступ.

vector<Foo>::iterator i = vecFoo.begin() + (pF1 - &vecFoo.front());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...