c++ - For 循环只比较数组的第一部分而不是整个
问题描述
嗨,我正在制作一个基础形状库作为学习 C++ 的练习,我正在制作三角形类,并正在制作一个用于检查两个三角形是否全等/相似的函数。然而,用于比较两个三角形的 for 循环仅比较数组的第一个元素。
我对 C++ 很陌生,所以我不知道要尝试什么来解决这个问题。
bool Triangle::checkCongruentWith(Triangle comparee){
float* sides1 = sides;
float* sides2 = comparee.sides;
std::sort(sides1, sides1+3);
std::sort(sides2, sides2+3);
for(int i = 0; i < 3; i++){
std::cout<<sides1[i]<<" "<<sides2[i]<<std::endl;
if(sides1[i]!=sides2[i]){
return false;
}
}
return true;
}
bool Triangle::checkSimilarWith(Triangle comparee){
float* angles1 = angles;
float* angles2 = comparee.angles;
std::sort(angles1, angles1+3);
std::sort(angles2, angles2+3);
for(int i = 0; i < 3; i++){
std::cout<<angles1[i]<<" "<<angles2[i]<<std::endl;
if(angles1[i]!=angles2[i]){
return false;
}
}
return true;
}
解决方案
此代码中使用的一致性测试是:
如果一个三角形的三个边等于另一个三角形的三个边,则这些三角形全等。
对于相似的三角形是:
如果两个三角形的两个角相等,则三角形相似。[..] 当两个角度相等时,所有三个角度都必须相等。
这两条规则都暗示元素的特定排列并不重要,只要它们包含所有相同的元素时它们必须相等,而不管顺序如何)。IE。( {3,1,2} == {1,2,3}
.
首先对数组进行排序 ( std::sort
) 只是让比较更容易(只要一对边或角度不相等,您就知道三角形不能全等/相似),这在行中进行了检查if(angles1[i]!=angles2[i]){ return false;}
。
推荐阅读
- raspberry-pi3 - 树莓派无法识别默认密码
- javascript - 如何创建一个简单的 HTML/Javascript 测验答案检查器?
- angular - Angular:在 Observable 完成之前完成测试
- azure - 无法在 azure databricks 中保存表
- python-3.x - 当嵌套在具有多个参数的条件中时,pdb 不会在 continue 语句上停止
- node.js - 回调不是函数:(
- excel - 文档锁定编辑
- c++ - 为什么ifstream读取超出eof?(即使没有打开文件)如何在 eof 处停止读取?
- r - 如何根据组向嵌套图添加额外的标题组件
- python - 根据列名计算并获取名称作为计算的一部分