2016-10-04 85 views
0

我对C++非常陌生我刚刚在本周开始学习它。函数查找向量中的最小值和最大值,并返回它们的索引

如问题所说,我想在矢量vector<int> pricelist{10,23,45,12,32}找到的最高值和最低值,所以我希望得到的返回0和2

public: 
Prices(const int lowestPriceIn, const int highestPriceIn) 
     : lowestPrice(lowestPriceIn), highestPrice(highestPriceIn) { 
    } 

我想提出一个功能方法lowestNHighestPrices()

我假设我可以创建一个遍历向量的循环,但是我将如何确定哪个是最低和最高值?我怎样才能得到索引而不是元素?

我有2个get方法返回2个int变量,一个是最低值,另一个是最高值。

int getlowestPrice() const { 
     return lowestPrice; 
    } 

    int gethighestPrice() const { 
     return highestPrice; 
    } 
+2

搜索如何获得矢量中的最小/最大值。然后搜索如何从迭代器获取索引。这两个人都被问及在这里回答很多次。 – juanchopanza

+1

['std :: minmax_element'](http://en.cppreference.com/w/cpp/algorithm/minmax_element) – 101010

回答

1
int getlowestPrice() const { 
    vector<int>::iterator it = std::min_element(pricelist); 
    lowestPrice = it - pricelist.begin(); 
    return lowestPrice; 
} 

int gethighestPrice() const { 
    vector<int>::iterator it = std::max_element(pricelist); 
    highestPrice = it - pricelist.begin(); 
    return highestPrice; 
} 
+0

'vector 迭代器如何编译? –

4

你可以使用std::minmax_element两全最小值和最大值,并一气呵成各自的指数,以下列方式:

std::vector<int> v {10,23,45,12,32}; 
auto mm = std::minmax_element(v.begin(), v.end()); 
auto idx_min = std::distance(v.begin(), mm.first); 
auto idx_max = std::distance(v.begin(), mm.second); 

Live Demo

+0

我不断收到一个错误std命名空间没有成员minmax_element。为什么会这样? – LovesPie

+0

@LovesPie是否包含''标题?你的编译器是否支持C++ 11? – 101010

+0

抱歉,不完全确定标题是什么(我确实说过我对这门语言非常陌生)......并且它确实支持C++ 11。 – LovesPie