我有两个课程,让我们先调用一个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;
}
非常感谢有关此事的帮助。
答案 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容器作为您的库存。这将强制清单中的每辆汽车都是独一无二的,并且可以大量存货。