C++ 在向量迭代C+中比较两个对象+;
在这种情况下,如何实现比较功能C++ 在向量迭代C+中比较两个对象+;,c++,vector,comparison-operators,C++,Vector,Comparison Operators,在这种情况下,如何实现比较功能 void remove(const Object1 &object1) { for(auto &object2 : objectVector) { if(object1 == object2) { /*....... */ } } } 如果object是一个类,您可以将类中的运算符==作为友元函数重写,或者您可以实现自己的函数bool isEqual(Object1 o1,
void remove(const Object1 &object1) {
for(auto &object2 : objectVector) {
if(object1 == object2) {
/*....... */
}
}
}
如果object是一个类,您可以将类中的运算符==作为友元函数重写,或者您可以实现自己的函数bool isEqual(Object1 o1,Object1 o2){if(something)return true;return false;}您提出了两个问题:
操作符==
。确保覆盖运算符=代码>然后也是
作为成员职能:
bool Object1::operator ==(const Object1 &b) const
{
// return true if *this equals b;
}
bool operator ==(const Object1 &a, const Object1 &b)
或作为自由函数:
bool Object1::operator ==(const Object1 &b) const
{
// return true if *this equals b;
}
bool operator ==(const Object1 &a, const Object1 &b)
如何从向量中删除具有给定值的对象:
最简单的方法是使用std::remove
:
objectVector.erase(std::remove(objectVector.begin(), objectVector.end(), object1), objectVector.end());
您也可以在遍历向量时删除对象,但是您必须记住,向量迭代器随后将失效。然后,您可能不会进一步迭代向量。类的对象可以包含不同类型和不同数量的成员,因此假设您有一个类a
:
class A{
int x,
float y;
char* z;
};
你有两个例子:
A a1;
A a2;
比较:
if(a1 == a2) // compile-time error
;// DoSomeThing
上面的错误是因为编译器不知道哪些字段将相互比较。解决方案是重载equals操作符“==”来处理类的对象
class Student{
public:
Student(std::string, int age);
std::string getName()const;
int getAge()const;
bool operator == (const Student&);
private:
std::string name;
int age;
};
Student::Student(std::string str, int x) :
name(str), age(x){
}
bool Student::operator == (const Student& rhs){
return age == rhs.age;
}
std::string Student::getName()const{
return name;
}
int Student::getAge()const{
return age;
}
int main(){
Student a("Alpha", 77);
Student b("Beta", 49);
if(a == b)
std::cout << a.getName() << " is the same age as " <<
b.getName() << std::endl;
cout << endl << endl;
return 0;
}
班级学生{
公众:
学生(std::string,int-age);
std::string getName()常量;
int getAge()常量;
布尔运算符==(常量学生&);
私人:
std::字符串名;
智力年龄;
};
Student::Student(std::string str,int x):
姓名(str)、年龄(x){
}
布尔学生::运算符==(常量学生和rhs){
返回年龄==rhs.age;
}
std::string Student::getName()常量{
返回名称;
}
int Student::getAge()常量{
回归年龄;
}
int main(){
学生a(“阿尔法”,77岁);
学生b(“贝塔”,49岁);
如果(a==b)
std::你的意思是如何删除向量的元素吗?或者你不知道如何为对象类实现操作符==
?我基本上想从列表中删除给定的元素,我认为这是一种正确的方法?如果你删除基于范围的中的元素,可能值得指出de>对于
循环,必须中断
,因为std::vector::erase
会使迭代器无效。最好将比较函数实现为非成员函数,以允许在两侧进行隐式类型转换。如果*this等于b,则返回true;
至少注释掉它。“在大多数情况下,它应该是默认实现的。”不是真的。std中没有接受这些参数的删除函数。有。请看这里的第一个重载: