P S:可能已经问过这个问题,但我尝试了很多,而且我没有使用带向量的指针。如果解决方案是这样,请告诉我如何在这里使用指针。
我的问题:我正在创建Car
类实例的向量,并使用getter
和setter
方法检索并推送其中的新记录。即使我正在编辑那些记录,但我不知道如何删除特定记录!我已将代码放入我自己尝试过的评论中。有人可以帮我从这个载体删除/删除类的特定记录/实例吗?
提前致谢。
#include "Car.h"
#include "global.h"
#include <string>
#include <vector>
#include <algorithm>
#include <iomanip>
int cid =1;
string Name;
float Price;
//In this function I want to delete the records
void deleteCarVector( vector<Car>& newAllCar)
{
int id;
cout << "\n\t\t Please Enter the Id of Car to Delete Car Details : ";
cin >> id;
//replace (newAllCar.begin(), newAllCar.end(),"a","b");
unsigned int size = newAllCar.size();
for (unsigned int i = 0; i < size; i++)
{
if(newAllCar[i].getId() == id)
{
cout << "Current Car Name : "<<newAllCar[i].getName() << "\n";
// Here Exactly the problem!
// delete newAllCar[i];
// newAllCar.erase(newAllCar[i].newName);
// newAllCar.erase(remove(newAllCar.begin(),newAllCar.end(),newAllCar.at(i).getId()));
}
}
printCarVector(newAllCar);
cout << endl;
}
答案 0 :(得分:2)
即使我正在编辑那些记录,但我不知道如何删除 特别记录??? 我已将代码放在我试过的评论中 我自己如果有人知道请告诉我如何“删除/删除” 来自vector类对象的特定记录?
您自己的问题中有答案:根据您提供的密钥/ ID,您需要Erase–remove idiom从Car
中删除std::vector < Car >
个对象。
carVec.erase(std::remove_if(carVec.begin(), carVec.end(), [&id_to_delete](const Car& ele)->bool
{
return ele.getnewId() == id_to_delete;
}), carVec.end());
答案 1 :(得分:1)
如果您不想使用lambda函数,可以执行以下操作
void deleteCarVector( vector<Car>& newAllCar)
{
int id;
cout<<" \n\t\t Please Enter the Id of Car to Delete Car Details : ";
cin>>id;
auto carItr = newAllCar.begin();
while(carItr != newAllCar.end())
{
if((*carItr)->getId==id)
{
delete *carItr;
newAllCar.erase(carItr);
break;
}
carItr++;
}
printCarVector(newAllCar);
cout << endl;
}