比较矢量迭代中的两个对象C
Compare two objects in vector iteration C++
如何在这种情况下实现比较功能?
void remove(const Object1 &object1) {
for(auto &object2 : objectVector) {
if(object1 == object2) {
/*....... */
}
}
}
您问2个问题:
- 如何使对象可比较:
通过为课程实现operator==
。请确保您也覆盖operator !=
。
作为成员函数:
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
上方会出现错误,因为编译器不知道将彼此比较哪些字段。解决方案是超载等价运算符" =="以在类的对象上工作。
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;
}
- 现在,编译器知道如何比较班级的对象,并知道对您的opters成员进行比较的内容。
如果对象是一类,则可以将operator替补为"朋友函数"中的运算符==,或者您可以实现自己的函数bool iSequal(object1 o1,object1 o2({if(if(if((返回true;返回false;}
相关文章:
- 如何返回一个类的两个对象相加的结果
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 停止cmake target_link_libraries将插件中静态库的两个对象文件链接到静态库本身
- 为什么C++在将一个对象复制到另一个对象时需要对这两个对象进行低级常量限定
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 具有相同特征的两个对象是否只在内存中存储一次?无论定义它们的函数是什么,都是不同的
- 如何在Qt中连接来自不同窗口的两个对象?
- C++两个对象,其中包含指向同一数组不同部分的指针
- 为什么将两个对象分配给另一个对象后,两个对象不一样?
- C++:在另外两个对象之间共享一个对象
- 在单元测试中,如何在不使用 operator== 的情况下比较两个对象,这可能会错过新成员?
- 同一类的两个对象相互引用
- 将类对象传递给两个对象
- 如何调用运算符函数添加两个对象?
- 让一个名为A的类.传递以下两个对象有什么区别:(a)obj1和(b)obj1()
- 比较矢量迭代中的两个对象C
- 当我有两个对象时<<如何重载运算符?(有关系)
- 声明一个模板函数,将模板类友元的两个对象(仅)带到这两个专用化
- 使用指针将两个对象(每个都与一个类)相关联
- 比较类的两个对象之间的数据