Aracılığıyla paylaş


transform_view class (C++ Standart Kitaplığı)

Her biri belirtilen aralıktaki bir öğenin dönüşümü olan öğelerin görünümü.

Sözdizimi

template<input_range V, move_constructible F>
    requires view<V> && is_object_v<F> &&
    regular_invocable<F&, range_reference_t<V>> &&
    can-reference<invoke_result_t<F&, range_reference_t<V>>>
class transform_view : public view_interface<transform_view<V, F>>;

Şablon parametreleri

F
Öğeleri dönüştüren işlev nesnesinin türü.

V
Temel alınan görünümün türü.

Özellikleri görüntüleme

Aşağıdaki girdilerin açıklaması için bkz . Sınıf özelliklerini görüntüleme

Characteristic Açıklama
Aralık bağdaştırıcısı views::transform
Temel alınan aralık Veya üzerini karşılaması input_range gerekir
Öğe türü Dönüştürme işlevinin dönüş türüyle aynıdır.
Yineleyici kategoriyi görüntüleme input_range Temel alınan aralığa random_access_rangebağlı olarak en fazla destekler.
Boyutlu Yalnızca temel alınan aralık karşılanırsa sized_range
- constyinelenebilir Yalnızca temel alınan aralık yinelenebilirse const ve dönüştürme başvurularda const çalışıyorsa.
Ortak aralık Yalnızca temel alınan aralık karşılanırsa common_range
Ödünç alınan aralık Hayır

Üyeler

Üye işlevleri Açıklama
OluşturucularC++20 Görünümü oluşturma.
baseC++20 Temel alınan aralığı alın.
beginC++20 İlk öğeye bir yineleyici alın.
endC++20 Görünümün sonunda sentinel'i alın.
sizeC++20 Öğe sayısını alın. Temel alınan aralığın karşılaması sized_rangegerekir.
Devralınan view_interface Açıklama
backC++20 Son öğeyi alın.
emptyC++20 Görünümün boş olup olmadığını test edin.
frontC++20 İlk öğeyi alın.
operator boolC++20 Görünümün boş olup olmadığını test edin.
operator[]C++20 Öğesini belirtilen konumda alın.

Gereksinimler

Üst bilgi: <ranges> (C++20'den beri)

Ad alanı: std::ranges

Derleyici Seçeneği: /std:c++20 veya üzeri gereklidir.

Oluşturucular

Bir örneğini oluşturma transform_view

1) transform_view() requires default_initializable<V>
         && default_initializable<F> = default;
2) constexpr transform_view(V base, F func);

Parametreler

base
Temel alınan görünüm.

func
Her öğeyi dönüştüren işlev.

Şablon parametre türleri hakkında bilgi için bkz . Şablon parametreleri.

Dönüş değeri

Bir transform_view örnek.

Açıklamalar

Oluşturmanın transform_view en iyi yolu, aralık bağdaştırıcısını views::transform kullanmaktır. Aralık bağdaştırıcıları, görünüm sınıfları oluşturmanın amaçlanan yoludur. Kendi özel görünüm türünüzü oluşturmak istemeniz durumunda görünüm türleri kullanıma sunulur.

1) Değer tarafından transform_viewbaşlatılan bir oluşturun. Dönüştürme işlevi ve temel alınan görünüm varsayılan olarak başlatılabilir olmalıdır.
2) yapısını transform_view bir base görünümden ve bir dönüştürme işlevinden functaşıyın. hem hem de base func aracılığıyla std::move()taşınır.

Örnek: transform_view

// requires /std:c++20 or later
#include <ranges>
#include <iostream>
#include <vector>
#include <chrono>

using namespace std;
using namespace chrono;

void print(auto v)
{
    for (auto x : v)
    {
        cout << x << ' ';
    }
    cout << '\n';
}

struct classes
{
    string className;
    weekday startDay;
};

int main()
{
    std::vector<int> v{0, 1, 2, 3, -4, 5, 6};

    // outputs 0 2 4 6 -8 10 12
    print(v | std::views::transform([](int i) {return i * 2; }));

    // ---- Modify the elements in the collection by returning a reference to the element to transform

    std::vector<classes> theClasses = {
        {"Math", Monday},
        {"English", Wednesday},
        {"History", Monday},
        {"Science", Wednesday},
        {"Art", Friday},
        {"Music", Thursday}
    };

    // lambda to get a reference to the day of the week for a class
    auto getDay = [](classes& c) -> weekday&
    {
        return c.startDay;
    };

    // If a class starts on Monday, change it to Tuesday
    for (auto&& startDay : theClasses | std::views::transform(getDay))
    {
        // modify the startDay in the collection
        if (startDay == Monday)
        {
            startDay = Tuesday;
        }
    }

    // output classes and start times
    for (auto c : theClasses)
    {
        std::cout << c.className << " : " << c.startDay << '\n';
    }
}
0 2 4 6 -8 10 12
Math : Tue
English : Wed
History : Tue
Science : Wed
Art : Fri
Music : Thu

base

Temel alınan görünümü alın.

// Uses a copy constructor to return the underlying view
constexpr V base() const& requires std::copy_constructible<V>;

// Uses std::move() to return the underlying view
constexpr V base() &&;

Parametreler

Hiçbiri.

Döndürülenler

Temel alınan görünüm.

begin

Görünümdeki ilk öğeye bir yineleyici alın.

constexpr auto begin();

Dönüş değeri

Görünümdeki ilk öğeye işaret eden bir yineleyici. Görünümün bir koşulu yoksa davranış tanımlanmamıştır.

10, 20 ve 30 öğelerini içeren bir vektör resmi. İlk öğe 10 içerir ve begin() olarak etiketlenir. Son öğe 30 içerir ve 'son öğe' olarak etiketlenmiştir. Son öğeden sonraki bir sanal kutu sentinel'i gösterir ve end() olarak etiketlenmiştir.

end

Görünümün sonunda sentinel'i alın.

constexpr auto end()

Dönüş değeri

Görünümdeki son öğeyi izleyen sentinel:

10, 20 ve 30 öğelerini içeren bir vektör resmi. İlk öğe 10 içerir ve begin() olarak etiketlenir. Son öğe 30 içerir ve 'son öğe' olarak etiketlenmiştir. Son öğeden sonraki bir sanal kutu sentinel'i gösterir ve end() olarak etiketlenmiştir.

size

Görünümdeki öğe sayısını alın.

constexpr auto size() requires ranges::sized_range<V>;
constexpr auto size() const requires ranges::sized_range<const V>;

Parametreler

Hiçbiri.

Dönüş değeri

Görünümdeki öğe sayısı.

Ayrıca bkz.

<ranges>
filter aralık bağdaştırıcısı
sınıfları görüntüleme