Table of Contents
Pipelining Range-v3 Transformations with Temporary Containers
Issue: Transforming a Range with a Function Returning Temporary Vectors
Solution: Introducing Cache1 Operator
Code Example
Range Properties
Home Backend Development C++ How can I transform an infinite range with a function returning temporary containers in range-v3?

How can I transform an infinite range with a function returning temporary containers in range-v3?

Oct 30, 2024 am 04:42 AM

How can I transform an infinite range with a function returning temporary containers in range-v3?

Pipelining Range-v3 Transformations with Temporary Containers

In range-v3, creating a pipeline that transforms elements of a potentially infinite range using a third-party function that returns a vector can be challenging due to the inability to create views of temporary containers.

Issue: Transforming a Range with a Function Returning Temporary Vectors

Consider the following code:

auto rng = src | view::transform(f) | view::join;
Copy after login

where src is an infinite range of type T, and f is a third-party function that returns a std::vector<T>. Executing this code would result in a compilation error because view::transform creates a view of a temporary container returned by f.

Solution: Introducing Cache1 Operator

Recent updates to range-v3 have introduced a solution to this issue: the views::cache1 operator. This operator creates a temporary container that stores the output of a transformation, allowing other views in the pipeline to access its elements.

To implement the desired pipeline correctly, add views::cache1 before views::join:

auto rng = src | view::transform(f) | views::cache1 | views::join;
Copy after login

Code Example

The following code sample demonstrates the usage of views::cache1 in practice:

<code class="cpp">auto rng = views::iota(0, 4)
        | views::transform([](int i) { return std::string(i, char('a' + i)); })
        | views::cache1
        | views::join('-');

check_equal(rng, {'-', 'b', '-', 'c', 'c', '-', 'd', 'd', 'd'});</code>
Copy after login

Range Properties

It's important to note that the transformed range rng does not retain all the range properties of its source range. In the example above, it loses the forward range concept due to the creation of temporary containers.

The above is the detailed content of How can I transform an infinite range with a function returning temporary containers in range-v3?. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot Article Tags

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

What are the types of values ​​returned by c language functions? What determines the return value? What are the types of values ​​returned by c language functions? What determines the return value? Mar 03, 2025 pm 05:52 PM

What are the types of values ​​returned by c language functions? What determines the return value?

What are the definitions and calling rules of c language functions and what are the What are the definitions and calling rules of c language functions and what are the Mar 03, 2025 pm 05:53 PM

What are the definitions and calling rules of c language functions and what are the

Gulc: C library built from scratch Gulc: C library built from scratch Mar 03, 2025 pm 05:46 PM

Gulc: C library built from scratch

C language function format letter case conversion steps C language function format letter case conversion steps Mar 03, 2025 pm 05:53 PM

C language function format letter case conversion steps

Where is the return value of the c language function stored in memory? Where is the return value of the c language function stored in memory? Mar 03, 2025 pm 05:51 PM

Where is the return value of the c language function stored in memory?

distinct usage and phrase sharing distinct usage and phrase sharing Mar 03, 2025 pm 05:51 PM

distinct usage and phrase sharing

How do I use algorithms from the STL (sort, find, transform, etc.) efficiently? How do I use algorithms from the STL (sort, find, transform, etc.) efficiently? Mar 12, 2025 pm 04:52 PM

How do I use algorithms from the STL (sort, find, transform, etc.) efficiently?

How does the C   Standard Template Library (STL) work? How does the C Standard Template Library (STL) work? Mar 12, 2025 pm 04:50 PM

How does the C Standard Template Library (STL) work?

See all articles