2017-10-11 396 views
-2

我有一小段代碼使用std::min_element打印範圍內的最小元素。 cppreference示例打印最小元素的索引,但我想打印最小的元素而不是索引號。如何在C++ 17中使用std :: min_element?

#include <algorithm> 
#include <iostream> 
#include <vector> 

int main() 
{ 
    std::vector<int> v{3, 1, 4, 1, -5, 9}; 
    std::cout << std::min_element(std::begin(v), std::end(v)); 
} 

但是,我得到了如下的錯誤:

main.cpp: In function 'int main()': 
main.cpp:8:15: error: no match for 'operator<<' (operand types are 'std::ostream {aka std::basic_ostream<char>}' and '__gnu_cxx::__normal_iterator<int*, std::vector<int> >') 
    std::cout << std::min_element(std::begin(v), std::end(v)); 

那麼,什麼是錯我的代碼?

+3

就像你在C++ 14中使用它一樣。 – juanchopanza

回答

8

如果你看一下std::min_element聲明:

template <class ForwardIterator> 
    ForwardIterator min_element (ForwardIterator first, ForwardIterator last); 

你看到它返回一個迭代。所以,你必須取消對它的引用訪問實際值:

std::cout << *std::min_element(std::begin(v), std::end(v)); 

那的理由是顯而易見的:如果你想要做的比打印的價值,如刪除它的其他東西嗎?

相關問題