我正在尝试读取包含重量和高度的两个文本文件,然后将它们存储到矢量中。之后,我想检查它们是否相等。例如,如果一个文本具有90个权重,10个高度,另一个文本文件具有50个权重和12个高度。我该怎么做?感谢
#include <iostream>
#include <vector>
#include <cstdlib>
#include <fstream>
#include <string>
using namespace std;
class Person{
public:
Person();
Person(int weight, int height);
bool operator ==(const Person& e);
private:
int weight;
int height;
};
void readFile(string file, std::vector<Person>&p);
int main(){
std::vector<Person>p;
std::vector<Person>e;
readFile("person1.txt", p);
readFile("person2.txt", e);
(p==e);
return 0;
}
Person::Person(int weight, int height){
weight = weight;
height = height;
};
bool Person::operator ==(const Person& e)
{
return ((weight== e.weight)
&& (height== e.height));
}
void readFile(string file, std::vector<Person>&p){
int height1;
int weight1;
ifstream inFile;
inFile.open(file.c_str());
if(inFile.fail()){
cerr << "Error opening file.";
exit(1);
}
while(!inFile.eof()){
inFile >> height1 >> weight1;
p.push_back(Person(height1, weight1));
}
inFile.close();
}
答案 0 :(得分:0)
您想检查两个文件中的所有元组是否相等吗?
您想查看每个文件中的至少1个元组匹配吗?
对于案例1,只需遍历两个向量,看看两个向量中的每个对象是否相同(你已经有了#39; ==&#39;重载)。
对于案例2,从vector1中选择一个并从vector2中检查所有,并对所有vector1对象重复。
此外,readFile
不应该是班级Person
的成员函数。使它成为一个独立的功能。
注意:在main中声明向量并将其传递给readFile
,然后相应地检查相等性。
修改强> ==运算符重载应该是
bool operator==(const Person&) const ; // since it does not mutate the object
bool Person::operator==(const Person& p) const
{ ... }
答案 1 :(得分:0)
OT,但是你的构造函数不起作用,因为你只是访问参数weight
和height
并且不分配成员
Person::Person(int weight, int height){
weight = weight;
height = height;
};
您可以重命名参数,例如如果您想保留名称,请w
和h
或前缀this->
Person::Person(int weight, int height){
this->weight = weight;
this->height = height;
};
另一种方法是使用成员初始化
Person::Person(int weight, int height)
: weight(weight), height(height)
{
};
对于您的问题,由于您无法知道哪个值是权重,哪个值是高度,因此您只能看到其中有多少个值,并比较两个文件中是否存在相同数量的整数。