A sentinel in C++ is an object used to signal the end of a range, allowing algorithms to know when to stop processing. Unlike traditional iterators, which point to specific memory addresses, sentinels provide a more flexible way to define the end of a range.
Sentinels can be compared to iterators using the ==
and !=
operators. When the comparison returns true
, the algorithm stops.
Sentinels are particularly useful when the endpoint of a range is not known in advance or is determined dynamically during the execution of an algorithm.
For instance, you might use a sentinel to end a range at the first negative number in a list, which is a condition discovered during iteration.
Here is a simple example:
#include <iostream>
#include <vector>
struct Sentinel {
bool operator==(
std::vector<int>::const_iterator iter) const {
return *iter < 0;
}
};
int main() {
std::vector<int> numbers{1, 4, 3, 8, -2, 5};
Sentinel s;
for (auto it = numbers.begin(); it != s; ++it) {
std::cout << *it << ", ";
}
}
1, 4, 3, 8,
In this example, the loop stops when it encounters the first negative number, thanks to the custom sentinel.
Answers to questions are automatically generated and may not have been reviewed.
An alternative way of defining ranges, and why we sometimes need to use them