Fully Functional C++ with Range-v3
3rd edition, April 2023
This page lists the most important changes that were made in the third edition of the book Fully Functional C++ with Range-v3.
Compiler change
Instead of Wandbox, please use Godbolt with gcc 12.2 and range-v3 enabled or this setting to compile the examples from the book.
Major content changes
We have added 6 short examples and 6 one-page examples mostly focused on the practical use of views::partial_sum, views::exclusive_scan, views::cycle, views::repeat, original use of views::stride and the problem of non-uniformly sized grouping or selection. These include:
Short examples
- Star numbers
- Arithmetic sequence 385
- Least common multiple
- Meeting overlaps
- Decimal to binary
- Continued fraction
Long examples
- Balanced parentheses
- Runsums
- Rail fence cipher
- Non-uniform chunks
- Convert seconds to compound duration
- Linear convolution 1D
Exercises
- Capitalize every N-th letter
- Morse numerals
- de Bruijn sequence
- Thousands separator
- Pair-wise swap
- Cryptarithm
Other content changes
- We have updated the links with A Plan for C++23 Ranges by Barry Revzin and removed the no-longer existing article A Prime Opportunity for Ranges by Christopher di Bella.
- The section on Range-v3 vs C++ Ranges has been updated to list major name changes, as well as essential but still missing views in C++23.
- Due to very low priority of actions in the plan for C++23, we have removed actions from the printed book. You can still find them on the accompanying website.
- CamelCase to snake_case example now uses views::chunk_by instead of views::tokenize.
Other changes related to developments in C++23
- We have globally replaced views::group_by by views::chunk_by.
- Unlike views::filter, views::remove_if is not available in C++20. As a result, we have mostly replaced views::remove_if by views::filter. Think of views::filter as KEEP.
Other smaller corrections
- Return type of std::isdigit is now explicitly stated as bool for all comparisons.
- Geometric sequence is generated using a simpler construct views::transform (1 << x) on views::iota(0).
- Instead of a failed assertions, drop_last(x) now returns an empty view [] if x is greater than the size of the range.
Online additions
- Maximum sum descent was added into quizzers.
Tagged: Range-v3