Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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.
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:
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ı.