C ++用于在向量中查找min + max值元素的函数

时间:2016-10-03 21:36:05

标签: c++

我刚开始学习C ++,所以我对此很新。

我有一个存储在主类中的向量. . . { test: /\.css$/, loader: 'style!css-loader?modules&importLoaders=1&localIdentName=[name]__[local]___[hash:base64:5]' } . . .

我想实现一个函数vector<int> pricelist{30,10,16,25,13};来返回一个lowestNHighestPrices()对象,它给出了向量中最高和最低值的索引值(分别为0和1)。

Prices

该方法将由此代码行class Prices { protected: int lowestPrice; int highestPrice; public: Prices(const int lowestPriceIn, const int highestPriceIn) : lowestPrice(lowestPriceIn), highestPrice(highestPriceIn) { } int getlowestPrice() const { return lowestPrice; } int gethighestPrice() const { return highestPrice; } };

调用

我不完全确定语法,是否有一些我可以使用getter方法的关键字,以便我可以从向量中获取最高和最低值?这样Prices prices = lowestNHighestPrices(prices);getLowestPrice() == 0

4 个答案:

答案 0 :(得分:2)

根据评论中的建议,您可以使用std::min_elementstd::max_element。以下代码(更新了空列表的Prices类)进行了一次列表迭代。

class Prices {
  protected:
   int lowestPrice;
   int highestPrice;
   bool isValid;

public:
   Prices() : lowestPrice(), highestPrice(), isValid(false) {}
   Prices(const int lowestPriceIn, const int highestPriceIn)
     : lowestPrice(lowestPriceIn), highestPrice(highestPriceIn) {}
   void updateWith(int val)
     { if (!isValid) {
         lowestPrice = highestPrice = val;
         isValid = true;
       }
       else if (val < lowestPrice)
         lowestPrice = val;
       else if (val > highestPrice)
         highestPrice = val;
     }
};

Prices lowestNHighestPrices(const vector<int>& pricelist) {
  Prices result;
  for (auto val : pricelist)
    result.updateWith(val);
  return result;
}

答案 1 :(得分:2)

如果你有C ++ 11可用(你应该),只需使用std::minmax_element

Prices lowestNHighestPrices(const vector<int>& pricelist)
{
   assert( !pricelist.empty() ); // just in case
   auto res = std::minmax_element(
      pricelist.cbegin(),
      pricelist.cend()
   );
   return Prices( *res.first, *res.second );
}

答案 2 :(得分:1)

返回textView

std::pair<int, int>

答案 3 :(得分:0)

您的班级已经有一个公共接口/方法来处理您的高价和低价。从它返回另一个结构或使用pass by reference参数虽然是一种可能的解决方案,但在这种情况下看起来毫无意义。并且,如果需要更通用的代码,例如容器,则由于其抽象命名来访问成员变量,因此应优先使用另一个类/结构的std :: pair。