0 Tage Serie
cpp / expert
Snippet

Deklarative Datenpipelines mit Ranges und Views

C++20 Ranges ermöglichen die funktionale Komposition von Algorithmen unter Verwendung des Pipe-Operators. Views sind 'lazy', was bedeutet, dass Operationen erst beim tatsächlichen Zugriff ausgeführt werden, was temporäre Allokationen vermeidet und die Cache-Lokalität verbessert.

snippet.cpp
cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <ranges>
#include <vector>
#include <iostream>
int main() {
std::vector<int> nums = {1, 2, 3, 4, 5, 6};
auto results = nums
| std::views::filter([](int n) { return n % 2 == 0; })
| std::views::transform([](int n) { return n * n; });
for (int n : results) {
std::cout << n << " "; // 4 16 36
}
}
Erklärung
1
| std::views::filter(...)
Erstellt eine lazy Ansicht, die nur Elemente enthält, die dem Prädikat entsprechen.
2
| std::views::transform(...)
Wendet eine Transformationsfunktion verzögert auf jedes Element in der Pipeline an.