Iterator max(Iterator first, Iterator last, C cmp)
时间: 2023-11-28 18:47:11 浏览: 18
这是一个函数模板,接受两个迭代器(表示范围)和一个比较器,返回范围内最大的元素的迭代器。
其中,参数 `first` 和 `last` 分别表示范围的起始和结束位置,参数 `cmp` 是一个可调用对象(比较器),用于定义元素的大小关系。
函数的实现可以采用循环遍历范围内的元素,使用比较器对元素进行比较,找到最大的元素并返回其迭代器。
以下是一个示例实现:
```cpp
template<typename Iterator, typename C>
Iterator max(Iterator first, Iterator last, C cmp) {
if (first == last) {
return last;
}
Iterator max_it = first;
++first;
for (; first != last; ++first) {
if (cmp(*max_it, *first)) {
max_it = first;
}
}
return max_it;
}
```
在比较器 `cmp` 中,我们假设其具有如下形式:
```cpp
template<typename T>
struct MyLess {
bool operator()(const T& lhs, const T& rhs) const {
return lhs < rhs;
}
};
```
这个比较器返回 `true` 表示左侧元素比右侧元素小。在实际使用时,可以根据需要自定义比较器。例如,如果想要找到范围内最小的元素,可以使用 `MyGreater` 比较器,其返回值与 `MyLess` 相反。
```cpp
template<typename T>
struct MyGreater {
bool operator()(const T& lhs, const T& rhs) const {
return lhs > rhs;
}
};
```
这样,调用 `max` 函数时就可以传入不同的比较器,达到不同的比较目的。例如,找到一个容器中最大的元素可以这样写:
```cpp
std::vector<int> v{1, 2, 3, 4, 5};
auto max_it = max(v.begin(), v.end(), MyLess<int>());
std::cout << "max element: " << *max_it << std::endl;
```