如何根据某些值删除/删除类对象的向量

时间:2018-05-24 16:36:34

标签: c++ algorithm class c++11 stdvector

P S:可能已经问过这个问题,但我尝试了很多,而且我没有使用带向量的指针。如果解决方案是这样,请告诉我如何在这里使用指针。

我的问题:我正在创建Car类实例的向量,并使用gettersetter方法检索并推送其中的新记录。即使我正在编辑那些记录,但我不知道如何删除特定记录!我已将代码放入我自己尝试过的评论中。有人可以帮我从这个载体删除/删除类的特定记录/实例吗?

提前致谢。

Car.cpp

#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;
}

2 个答案:

答案 0 :(得分:2)

  

即使我正在编辑那些记录,但我不知道如何删除   特别记录??? 我已将代码放在我试过的评论中   我自己如果有人知道请告诉我如何“删除/删除”   来自vector类对象的特定记录?

您自己的问题中有答案:根据您提供的密钥/ ID,您需要Erase–remove idiomCar中删除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());

LIVE DEMO

答案 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;
}