我有一小段代码可以使用std::min_element打印范围内的最小元素。 cppreference示例打印最小元素的索引,但我想打印最小元素而不是索引号。
#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));
那么,我的代码出了什么问题?
答案 0 :(得分: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));
这个的基本原理很明显:除了打印值之外你还想做什么,比如删除它?