For循环仅比较数组的第一部分而不是整个部分

时间:2019-05-19 19:09:32

标签: c++ arrays

嗨,我正在制作一个基本的形状库作为学习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;
}

1 个答案:

答案 0 :(得分:0)

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

  

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

,对于相似的三角形为:

  

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

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

首先对数组进行排序(std::sort)使其比较容易(一旦一对边或角不相等,您就知道三角形不能全等/相似),这已选中在if(angles1[i]!=angles2[i]){ return false;}行中。