What does this square bracket and parenthesis bracket notation mean [first1,last1)?
Categories:
Understanding Interval Notation: [first, last) Explained

Explore the meaning and common uses of the mathematical interval notation [first, last)
, including its application in programming and mathematics.
The notation [first, last)
is a common way to represent an interval in mathematics and computer science. It's crucial for clearly defining ranges of numbers or elements, especially when dealing with sequences, arrays, or loops. This article will break down what this notation means, why it's used, and where you'll encounter it.
The Basics of Interval Notation
Interval notation provides a concise way to describe a set of real numbers between two endpoints. The type of bracket used indicates whether the endpoint is included or excluded from the set. Let's dissect [first, last)
:
The square bracket [
before first
means that the value first
is included in the interval. The parenthesis )
after last
means that the value last
is excluded from the interval. Therefore, the interval [first, last)
includes all numbers x
such that first <= x < last
.
graph TD A["Start of Interval (first)"] --> B{"Is 'first' included?"} B --> |Yes| C["Square Bracket '['"] C --> D["All numbers >= first"] D --> E["End of Interval (last)"] E --> F{"Is 'last' included?"} F --> |No| G["Parenthesis ')'"] G --> H["All numbers < last"] H --> I["Combined: [first, last)"]
Flowchart explaining the components of [first, last)
notation.
Common Applications in Programming
This half-open interval notation is particularly prevalent in programming languages, especially when working with array indices, loop ranges, and standard library functions. It simplifies logic by consistently defining ranges where the 'start' is inclusive and the 'end' is exclusive.
Consider an array with N
elements. Its indices typically range from 0
to N-1
. A loop iterating through all elements would naturally use a range like [0, N)
, meaning it starts at index 0
and continues up to, but not including, index N
. This avoids 'off-by-one' errors and makes the number of iterations immediately clear (N - 0 = N iterations).
my_list = [10, 20, 30, 40, 50]
# Iterate from index 0 up to (but not including) len(my_list)
for i in range(len(my_list)): # range(5) generates 0, 1, 2, 3, 4
print(f"Element at index {i}: {my_list[i]}")
# Output:
# Element at index 0: 10
# Element at index 1: 20
# Element at index 2: 30
# Element at index 3: 40
# Element at index 4: 50
Python's range()
function exemplifies [first, last)
behavior.
#include <iostream>
#include <vector>
int main() {
std::vector<int> myVector = {10, 20, 30, 40, 50};
// Iterate from iterator begin() up to (but not including) end()
for (auto it = myVector.begin(); it != myVector.end(); ++it) {
std::cout << "Element: " << *it << std::endl;
}
return 0;
}
// Output:
// Element: 10
// Element: 20
// Element: 30
// Element: 40
// Element: 50
C++ iterators often follow the [begin, end)
convention.
Other Interval Notations
While [first, last)
is common, it's helpful to be aware of other interval notations and their meanings:

Visualizing different interval notations on a number line.
[a, b]
(Closed Interval): Includes botha
andb
. Allx
such thata <= x <= b
.(a, b)
(Open Interval): Excludes botha
andb
. Allx
such thata < x < b
.(a, b]
(Half-Open Interval): Excludesa
but includesb
. Allx
such thata < x <= b
.[a, b)
(Half-Open Interval): Includesa
but excludesb
. Allx
such thata <= x < b
.
[
or ]
mean 'inclusive' (the endpoint is part of the set), while parentheses (
or )
mean 'exclusive' (the endpoint is NOT part of the set).