
QStringView Diaries: Zero-Allocation String Splitting - jcelerier
https://www.kdab.com/qstringview-diaries-zero-allocation-string-splitting/
======
akling
Hey that's pretty neat! It does feel a bit sad to vend a heap-allocating
vector of string views when it's only used for iteration.

Definitely gonna do something similar for my own C++ toolkit. :)

------
AlexanderDhoore
This could simply be done as an iterator over a string. Why all the fancy
schmancy C++ features?

EDIT: I'm starting to suspect it actually is just an iterator. So why not say
that? Instead of mentioning the ranges library, coroutines, generators ...

EDIT: Ok, so ranges make sense. Coroutines still seem overkill to me though.

~~~
msclrhd
Ranges are a (start, end) pair of iterators that support begin/end -- think of
them like a subset of containers that just provide access to the iterators
over them. They also support the end iterator being a different type to the
sstart iterator, supporting things like sentinel iterators (e.g. null pointer
checks).

The next standard library supports using the standard algorithms with ranges,
so you can say things like `std::sort(v)` instead of `std::sort(v.begin(),
v.end())`.

IIUC, views are ranges that can adapt the results of the underlying object
without changing the contents of that object, such as a lower-case view, or a
reversed view. These work by doing the lower-case conversion on dereference,
or swapping the increment/decrement operations.

