首页 > 解决方案 > 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;
}

标签: c++arrays

解决方案


此代码中使用的一致性测试是:

如果一个三角形的三个边等于另一个三角形的三个边,则这些三角形全等。

对于相似的三角形是:

如果两个三角形的两个角相等,则三角形相似。[..] 当两个角度相等时,所有三个角度都必须相等。

这两条规则都暗示元素的特定排列并不重要,只要它们包含所有相同的元素时它们必须相等,而不管顺序如何)。IE。( {3,1,2} == {1,2,3}.

首先对数组进行排序 ( std::sort) 只是让比较更容易(只要一对边或角度不相等,您就知道三角形不能全等/相似),这在行中进行了检查if(angles1[i]!=angles2[i]){ return false;}


推荐阅读