从向量/列表中搜索和删除指针

时间:2015-09-05 17:37:03

标签: c++ list pointers vector

我有两个课程,让我们先调用一个Car,另一个调用ShowRoom。

我想要做的是创建一个向量或列表,在其中我将存储指向Car对象的指针。然后,我想搜索这些向量/列表中的特定指针(将作为参数传递给名为removeCar()的函数),然后从向量/列表中删除该对象及其指针。

我一直在努力实现这个想法,现在使用算法函数"找到"和"删除",但我继续在对象转换上出错。我试图取消引用指针,但后来我得到一个错误,我是如何给"删除"。

以下是在ShowRoom函数中实现的代码:删除:

list <Car*> inventory;

void Delete(Car* BMW)
{
    if (find(inventory.begin(),inventory.end(),BMW) != inventory.end())
        remove(inventory.begin(),inventory.end(),BMW);
    else 
       cout << "Car not found" << endl;
}

非常感谢有关此事的帮助。

1 个答案:

答案 0 :(得分:-1)

在STL容器中存储普通指针总是有问题的。 STL被设计为存储对象,而不是指针。存储指针意味着当你们都试图调用复制构造函数和析构函数时,你和STL会互相攻击。

这是一种共同发明的指针,它们使生活变得更加容易。

http://www.cplusplus.com/reference/memory/shared_ptr/

我还建议不要使用指针来识别你的车。为每个汽车对象提供唯一的ID并使用它会更可靠(更少的错误)。

#include <iostream>
#include <set>
#include <memory>
using namespace std;

class Car
{
public:
    // Construct a Car, assigning it a unique ID
    Car()
    {
        myID = lastID++;
    }
    // Cars are equivalent if they have the same ID
    bool operator==( const Car& other ) const
    {
        return myID == other.myID;
    }
    // Sort cars by ID
    bool operator<( const Car& other ) const
    {
        return myID < other.myID;
    }
    // access the IF
    int getID() { return myID; }
private:
    int myID;
    static int lastID;
};

int Car::lastID = 0;

typedef std::shared_ptr< Car > car_t;
std::set< car_t> Inventory;

void Delete( car_t BMW)
{
    Inventory.erase( BMW );
}

int main()
{
    car_t car0( new Car );
    car_t car1( new Car );
    car_t car2( new Car );
    Inventory.insert( car0 );
    Inventory.insert( car1 );
    Inventory.insert( car2 );

    cout << "Current Inventory: ";
    for( auto c : Inventory )
    {
        cout << c->getID() << ", ";
    }
    cout << endl;

    Delete( car1 );

    cout << "Current Inventory: ";
    for( auto c : Inventory )
    {
        cout << c->getID() << ", ";
    }
    cout << endl;

    return 0;
}

作为进一步优化,我使用std :: set容器作为您的库存。这将强制清单中的每辆汽车都是独一无二的,并且可以大量存货。