g ++(GCC)4.7.2
我有以下载体
vector<Observer> observers;
我将使用这个来推进向量:
observers.push_back(ob);
我将把10个观察者推向载体。但是,我需要从矢量中删除一个。但是,因为我不知道观察者在向量中的位置。我怎样才能获得它的索引,以便我可以使用索引将其删除?
我需要获取索引,以便我可以使用erase
删除它observers.erase(observers.begin() + index);
非常感谢任何建议,
答案 0 :(得分:4)
您可以使用find
算法之一(可能是find_if)。如果符合您的条件,它会将迭代器返回到正确的元素,您可以直接将其提供给erase()
。
std::vector<Observer>::iterator toErase;
//Pick one of the following
toErase = std::find_if(observers.begin(), observers.end(),/*your predicate here*/);
toErase = std::find(observers.begin(), observers.end(), observerToDelete);
//If we found an observer matching the criteria
if(toErase != observers.end()){
observers.erase(toErase);
}
答案 1 :(得分:3)
您可以使用std::find
,但需要为Observer类重载相等==
运算符,以便程序知道如何比较对象
答案 2 :(得分:2)
std::find
应该适用于此。 std::find(observers.begin(), observers.end(), ob)
答案 3 :(得分:0)
真的 难吗?
int i = 0;
while (i < observers.size() && observers[i] != observerToDelete)
i++;
// Replace the != with any other way of comparing observers
// if needed
if (i < observers.size())
// found
(除了提到的std::find
,迭代器和1000多个方法)
答案 4 :(得分:0)
如果您知道观察员姓名
,也许应该使用std:map答案 5 :(得分:-1)
你可以使用“std :: find”,但也许你根本不需要“矢量”。也许您应该考虑使用“set”容器。当指数不是重要的时候,它是一种合法的选择。