Namespaces
Variants

std::ranges::views::cache_latest, std::ranges::cache_latest_view

De fr.cppreference.net
 
 
Bibliothèque d'intervalles (ranges)
Adaptateurs d'intervalles
 
 
Défini dans l'en-tête <ranges>
template< ranges::input_range V >
    requires ranges::view<V>
class cache_latest_view
    : public ranges::view_interface<cache_latest_view<V>>
(1) (depuis C++26)
namespace views {
    inline constexpr /* unspecified */ cache_latest = /* unspecified */;
}
(2) (depuis C++26)
Signature d'appel
template< ranges::viewable_range R >
    requires /* see below */
constexpr ranges::view auto cache_latest( R&& r );
(depuis C++26)
1) Un adaptateur d'intervalle qui met en cache le dernier élément accédé de sa vue sous-jacente afin que l'élément n'ait pas à être recalculé lors d'accès répétés.
2) RangeAdaptorObject. L'expression views::cache_latest(e) est équivalente à une expression à cache_latest_view(e) pour toute sous-expression appropriée e.

cache_latest_view est une input_range uniquement qui ne modélise jamais borrowed_range ni common_range.

Types imbriqués

Type Définition
CacheT (privé) std:: conditional_t < std:: is_reference_v < ranges:: range_reference_t < V >> ,
std:: add_pointer_t < ranges:: range_reference_t < V >> ,
ranges:: range_reference_t < V >>
( type membre d'exposition uniquement* )

Membres de données

Membre Description
V base_ (privé) la vue sous-jacente
( objet membre d'exposition uniquement* )
non-propagating-cache < CacheT > cache_ (privé) un objet qui met en cache le résultat de la dernière indirection de l'itérateur courant
( objet membre d'exposition uniquement* )

Fonctions membres

construit un cache_latest_view
(fonction membre publique)
retourne une copie de la vue sous-jacente (adaptée)
(fonction membre publique)
retourne un itérateur vers le début
(fonction membre publique)
retourne un itérateur ou un sentinelle vers la fin
(fonction membre publique)
retourne le nombre d'éléments. Fourni uniquement si la plage sous-jacente (adaptée) satisfait sized_range .
(fonction membre publique)
Hérité de ranges::view_interface
retourne si la vue dérivée est vide, fourni seulement si elle satisfait sized_range ou forward_range
(fonction membre publique de std::ranges::view_interface<D>)
(C++23)
retourne un itérateur constant au début de la plage
(fonction membre publique de std::ranges::view_interface<D>)
(C++23)
retourne une sentinelle pour l'itérateur constant de la plage
(fonction membre publique de std::ranges::view_interface<D>)
retourne si la vue dérivée n'est pas vide, fourni seulement si ranges::empty lui est applicable
(fonction membre publique de std::ranges::view_interface<D>)
obtient l'adresse des données de la vue dérivée, fourni seulement si son type d'itérateur satisfait contiguous_iterator
(fonction membre publique de std::ranges::view_interface<D>)
retourne le premier élément dans la vue dérivée, fourni si elle satisfait forward_range
(fonction membre publique de std::ranges::view_interface<D>)
retourne le dernier élément dans la vue dérivée, fourni seulement si elle satisfait bidirectional_range et common_range
(fonction membre publique de std::ranges::view_interface<D>)
retourne le nième élément dans la vue dérivée, fourni seulement si elle satisfait random_access_range
(fonction membre publique de std::ranges::view_interface<D>)

std::ranges::cache_latest_view:: cache_latest_view

cache_latest_view ( ) requires std:: default_initializable < V > = default ;
(1) (depuis C++26)
constexpr explicit cache_latest_view ( V base ) ;
(2) (depuis C++26)
1) Initialise par valeur base_ via son initialiseur de membre par défaut ( = V ( ) ).
2) Initialise base_ avec std :: move ( base ) .

Paramètres

base - une vue

std::ranges::cache_latest_view:: base

constexpr V base ( ) const & requires std:: copy_constructible < V > ;
(1) (depuis C++26)
constexpr V base ( ) && ;
(2) (depuis C++26)
1) Construit par copie le résultat à partir de la vue sous-jacente. Équivalent à return base_ ; .
2) Construit par déplacement le résultat à partir de la vue sous-jacente. Équivalent à return std :: move ( base_ ) ; .

std::ranges::cache_latest_view:: begin

constexpr auto begin ( ) ;
(depuis C++26)

Équivalent à return /*iterator*/ ( * this ) ; .

std::ranges::cache_latest_view:: end

constexpr auto end ( ) ;
(depuis C++26)

Équivalent à return /*sentinel*/ ( * this ) ; .

std::ranges::cache_latest_view:: size

constexpr auto size ( ) requires ranges:: sized_range < V > ;
(1) (depuis C++26)
constexpr auto size ( ) const requires ranges:: sized_range < const V > ;
(2) (depuis C++26)
1,2) Équivalent à return ranges:: size ( base_ ) ;

Guides de déduction

template < class R >
cache_latest_view ( R && ) - > cache_latest_view < views:: all_t < R >> ;
(depuis C++26)

Classes imbriquées

le type d'itérateur
( classe membre template d'exposition uniquement* )
le type de sentinelle
( classe membre template d'exposition uniquement* )

Notes

cache_latest_view est utile si le calcul de l'élément à produire est coûteux.

Macro de test de fonctionnalité Valeur Std Fonctionnalité
__cpp_lib_ranges_cache_latest 202411L (C++26) std::ranges::cache_latest_view

Exemple

#include <algorithm>
#include <print>
#include <ranges>
int main()
{
    const auto v = {1, 2, 3, 4, 5};
    auto square = [](int i)
    {
        std::print("transform: {} ", i);
        return i * i;
    };
    auto is_even = [](int i)
    {
        std::print("filter: {} ", i);
        return i % 2 == 0;
    };
    auto print = [](auto v)
    {
        std::ranges::for_each(v, [](int i){ std::println("Got: {}", i); });
        std::println();
    };
    std::println("Sans mise en cache (notez les recalculs) :");
    auto even_squares = v
        | std::views::transform(square)
        | std::views::filter(is_even);
    print(even_squares);
    std::println("Avec mise en cache :");
    auto fast_even_squares = v
        | std::views::transform(square)
        | std::views::cache_latest
        | std::views::filter(is_even);
    print(fast_even_squares);
}

Sortie :

Sans mise en cache (notez les recalculs) :
transform: 1 filter: 1 transform: 2 filter: 4 transform: 2 Got: 4
transform: 3 filter: 9 transform: 4 filter: 16 transform: 4 Got: 16
transform: 5 filter: 25 
Avec mise en cache :
transform: 1 filter: 1 transform: 2 filter: 4 Got: 4
transform: 3 filter: 9 transform: 4 filter: 16 Got: 16
transform: 5 filter: 25