【问题标题】:Need help searching for minimum value in a vector that is filled with users input需要帮助在充满用户输入的向量中搜索最小值
【发布时间】:2015-02-02 11:03:12
【问题描述】:
double find_min(sample &s){
    double i = 0;
    double min;
    for (i; i < s.get_data().size() - 1; i++){
        if (s.get_data().at(i) < s.get_data().at(i + 1)){
            min = s.get_data().at(i);
        }
        else{
            min = s.get_data().at(i + 1);
        }
    }
    return min;
}

我试图找到一个填充了用户输入的向量的最小值。当有一个小数时,x,以及它后面的所有其他数都大于x;该功能工作正常。

但是,当一个小于 x 的数字,我们称之为 y,出现在 x 之后,函数返回 y。

示例 1:[23,44,55,1,66,77] 的向量值 -> 函数将正确返回 1;

示例2:[23,44,55,1,3,44]的向量值->函数返回3?

【问题讨论】:

  • 索引使用整数类型,最好是size_t,因为它匹配size()的返回值。

标签: c++ search vector minimum


【解决方案1】:

您需要将数字与最小值进行比较。您只是在寻找小于以下数字的最后一个数字,以及 3

【讨论】:

  • @RIfRahman,如果您喜欢这个答案,请不要犹豫,为答案投票(相互理解)
  • 我尝试投票,但显然我需要成为代表 15?
  • 每个发布代码的人都应该对具有 0 或 1 个元素的向量进行单元测试。我明智地没有发布代码。 :)
【解决方案2】:

正如肯尼所说,您必须将其与 min 进行比较。它看起来像这样:

double find_min(sample &s){
  double i = 0;
  int min_index = 0;
  for (i; i < s.get_data().size() - 1; i++){
    if (s.get_data().at(i) < s.get_data().at(min_index)){
      min_index = i;
    }
  }
  return s.get_data().at(min_index);
}

【讨论】:

    【解决方案3】:

    假设您的第一个元素是最小值并从第二个元素开始比较。如果另一个元素小于之前设置的元素(最初是第一个元素),则将此元素设置为新元素。

    double find_min(sample &s)
    {
      double min  = s.get_data().at(0);
    
      for (int i=1; i < s.get_data().size() - 1; i++)
      {
        if (s.get_data().at(i) < min)
        {
          min = s.get_data().at(i);
        }
      }
      return min;
    }
    

    顺便说一句,您可以重载索引运算符 '[]' 来设置/获取元素,就像数组一样

    【讨论】:

      猜你喜欢
      • 2016-10-12
      • 2018-03-03
      • 2020-06-06
      • 1970-01-01
      • 2014-05-20
      • 1970-01-01
      • 2012-08-25
      • 2017-08-03
      相关资源
      最近更新 更多