#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
class A
{
public :
void getData(vector< A > &);
void putData(vector< A > &);
private :
int x;
char name[90];
};
vector< A > v;
void A :: getData(vector< A > &Aref)
{
cout << "id = ";
cin >> x;
cout << "\nname = ";
cin >> name;
}
void A :: putData(vector< A > &Aref)
{
cout << "size of vector is " << Aref.size() << endl;
for(int i=0; i < Aref.size(); i++)
cout << Aref[i].x << " : " << Aref[i].name << endl;
cin.ignore(numeric_limits< streamsize >::max(), '\n');
cin.get();
}
int main()
{
for(int i=0; i < 3; i++)
{
v.push_back(A());
v[0].getData(v);
v[0].putData(v);
}
vector< A >::iterator beg = v.begin(), en = v.end();
//v.erase( find(beg, en, v[1]) ); ----------------> DOESN'T WORK
return 0;
}
我用过这个
v.erase( find(beg, en, v[1]) );
(return 0;
之前的第二行至最后一行)
从数组vector< A > v;
中搜索和删除对象(A是类的名称)。
beg
和en
是指向开始和结束的迭代器。
find是否接受该对象作为其第三个参数?如果没有,我可以通过哪些方式删除对象?实际上,我想从对象数组搜索特定属性(例如id,name)值,然后删除该对象。< / p>
请指教?
答案 0 :(得分:3)
我的建议:
答案 1 :(得分:2)
为什么要这样做,getter和setter函数不应该是这样的,应该是:
void A :: getData() // why t
{
cout << "id = ";
cin >> x;
cout << "\nname = ";
cin >> name;
}
void A :: putData()
{
cout<<"The name is :" << name <<endl;
cout<<"id is :"<<x<<endl;
}
在main()中(你必须声明==运算符,以便你可以比较用户定义的对象):
for(int i=0; i < 3; i++)
{
v.push_back(A());
v[i].getData();
v[i].putData();
}
vector< A >::iterator beg = v.begin(), en = v.end();
v.erase(remove(beg ,end , v[0]) , v.end());
return 0;
答案 2 :(得分:0)
你似乎在寻找的不是std :: find,而是std :: find_if。 Here就是一个例子。
答案 3 :(得分:0)
谢谢,每个人我都明白我错过了什么我将==运算符添加到我的A类中,类似于:
bool A :: operator==(const A &t) const
{
return ( x == t.x && (strcmp(name, t.name) == 0) );
}
我按照 M3taSpl0it
的说法使用了我的getter和setter就删除对象而言,它在find函数上起作用。