0
0
CppHow-ToBeginner · 3 min read

How to Use min_element in C++: Syntax and Examples

In C++, use std::min_element from the <algorithm> header to find the smallest element in a range. It returns an iterator to the minimum element, which you can dereference to get the value.
📐

Syntax

The std::min_element function finds the smallest element in a range defined by two iterators. It has two main forms:

  • std::min_element(begin, end): Finds the minimum element using the default < operator.
  • std::min_element(begin, end, comp): Finds the minimum element using a custom comparison function comp.

Here, begin and end are iterators marking the start and one-past-the-end of the range.

cpp
template<class ForwardIt>
ForwardIt min_element(ForwardIt first, ForwardIt last);

template<class ForwardIt, class Compare>
ForwardIt min_element(ForwardIt first, ForwardIt last, Compare comp);
💻

Example

This example shows how to find the smallest number in a vector using std::min_element. It prints the minimum value found.

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

int main() {
    std::vector<int> numbers = {10, 5, 8, 3, 7};
    auto min_it = std::min_element(numbers.begin(), numbers.end());
    if (min_it != numbers.end()) {
        std::cout << "Minimum element is: " << *min_it << '\n';
    } else {
        std::cout << "Vector is empty." << '\n';
    }
    return 0;
}
Output
Minimum element is: 3
⚠️

Common Pitfalls

Common mistakes when using std::min_element include:

  • Not checking if the container is empty before dereferencing the returned iterator, which can cause undefined behavior.
  • Using min_element on containers without valid iterators or invalid ranges.
  • Forgetting to include the <algorithm> header.

Here is an example showing the wrong and right way to handle an empty container:

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

int main() {
    std::vector<int> empty_vec;

    // Wrong: dereferencing without check (undefined behavior)
    // auto min_it = std::min_element(empty_vec.begin(), empty_vec.end());
    // std::cout << *min_it << '\n'; // Unsafe!

    // Right: check before dereferencing
    auto min_it = std::min_element(empty_vec.begin(), empty_vec.end());
    if (min_it != empty_vec.end()) {
        std::cout << "Minimum element is: " << *min_it << '\n';
    } else {
        std::cout << "Vector is empty, no minimum element." << '\n';
    }

    return 0;
}
Output
Vector is empty, no minimum element.
📊

Quick Reference

Summary tips for using std::min_element:

  • Include <algorithm> to use min_element.
  • Pass iterators marking the range to search.
  • Check if the returned iterator equals end before dereferencing.
  • Use a custom comparator to change the comparison logic.

Key Takeaways

Use std::min_element to find the smallest element in a range by passing begin and end iterators.
Always check if the returned iterator is not equal to end before dereferencing to avoid errors.
Include the header to access std::min_element.
You can provide a custom comparison function to change how elements are compared.
std::min_element returns an iterator, so dereference it to get the actual minimum value.