The pipe operator composes a range with a view adaptor or transformation. In C++ ranges expressions, it lets each step follow the previous one, avoiding deeply nested calls and iterator bookkeeping. section 2.3.4
Skipping the first values
A vector can be passed through drop_while with `v | std::views::drop_while([](int i) { return i < 3; })`. Iterating over the result prints `3 4 5`. The same style can filter negative values from a row: `row | std::views::filter(negative)`. section 2.3.4
for (int n : v | std::views::drop_while([](int i) { return i < 3; })) {
std::cout << n << ' ';
}
Compare the pipe form with the equivalent direct call to see how chained range operations become easier to read. section 2.3.4





