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.
Bir aralığı sınırlayıcıya göre alt aralıklara böler. Sınırlayıcı tek bir öğe veya öğelerin görünümü olabilir. Sınırlayıcı, sonuçta elde edilen alt aralıkların bir parçası değildir.
ile lazy_split_view arasındaki split_view birincil farklar şunlardır:
| Görünüm | Aralığı const bölebilir |
aralık türü |
|---|---|---|
split_view |
hayır | Veya üzerini destekler forward_range . |
lazy_split_view |
evet | Veya üzerini destekler input_range . |
Bir "tembel" yapan lazy_split_view şey, bir sonraki sınırlayıcıya uygun görünmemesidir. Bu, destekleyebileceğiniz input_range , ancak split_view en azından forward_rangegerektirdiği anlamına gelir. Bunun nedeni input_range tek geçişli olması, ancak forward_range çoklu geçiş yinelemesine izin vermesidir.
Daha verimli olduğu için tercih edin split_view ; olan bir aralığı constbölmeniz gerekmediği sürece. Performans split_view açısından daha verimlidir.
A lazy_split_view , değerinden daha az verimli yineleyici artışına ve karşılaştırmaya split_viewsahiptir, ancak yine de O(1) değeridir. split_view Sınırlayıcılar arasındaki mesafe, alt aralıkların CPU önbelleğine sığacak kadar küçük olması durumunda daha iyi bir performansa sahiptir; bu durumda sınırlayıcı lookahead bir sonraki alt alanı etkili bir şekilde önceden önbelleğe alır.
Sözdizimi
template<input_range V, forward_range Pattern>
requires view<V> && view<Pattern> &&
indirectly_comparable<iterator_t<V>, iterator_t<Pattern>, ranges::equal_to> &&
(forward_range<V> || tiny_range<Pattern>)
class lazy_split_view : public view_interface<lazy_split_view<V, Pattern>>
Şablon parametreleri
Pattern
Sınırlayıcı sırasını belirten görünümün türü.
Gereksinim, (forward_range<V> || tiny-range <Pattern>) temel alınan aralık olmadığında forward_rangesınırlayıcının olması tiny_rangegerektiği anlamına gelir. A tiny_range , boyutu 0 veya 1 olan statik uzantılı bir aralıktır. tiny_range<T>sized_range<T>gerektirir ve T::size() 1'den küçük veya 1'e eşit bir sabit ifade olmalıdır.
V
Temel alınan görünümün türü.
Özellikler
Aşağıdaki girdilerin açıklaması için bkz . Sınıf özelliklerini görüntüleme
Aralık bağdaştırıcısı: Temel aralık: lazy_splityerine input_range getirmeli veya daha yüksek Olmalıdır Görünüm yineleyici kategorisi: temel alınan aralık Öğe türüyle aynıdır: Boyut koleksiyonurange_reference_t<V>: Ortak aralık yok: Temel alınan aralık hem hem de forward_range commonolduğunda Evet.
Ödünç alınan aralık: is -iterable yokconst: yalnızca temel alınan aralığın karşılanması forward_range ve yinelenebilir olması constdurumunda
Üyeler
| Üye işlevleri | Açıklama |
|---|---|
| Oluşturucular | Görünümü oluşturma. |
baseC++20 |
Temel alınan aralığı alın. |
beginC++20 |
Görünümdeki ilk öğeye bir yineleyici alın. |
endC++20 |
Görünümün sonunda sentinel'i alın. |
Devralınan view_interface |
Açıklama |
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. |
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 lazy_split_view
1) lazy_split_view() = default;
2) constexpr lazy_split_view(V base, Pattern pattern);
3) template<input_range R> requires constructible_from<V, views::all_t<R>> &&
constructible_from<Pattern, single_view<range_value_t<R>>>
constexpr lazy_split_view(R&& rg, range_value_t<R> e);
Şablon parametreleri
Pattern
Sınırlayıcının türü.
R
Aralığın türü.
V
Temel alınan görünümün türü.
Parametreler
e Görünümün bölüneceği yeri tanımlayan tek bir öğe. öğesi, sonuçta elde edilen alt bölümlerin bir parçası değildir.
base
Temel alınan görünüm.
pattern
Görünümün bölüneceği yeri tanımlayan öğelerin görünümü. Öğelerin görünümü, sonuçta elde edilen alt düzenlerin bir parçası değildir.
rg
Bölünecek aralık.
Dönüş değeri
Bir lazy_split_view veya daha fazla subrangeiçeren örnek.
Açıklamalar
Oluşturmanın lazy_split_view en iyi yolu, aralık bağdaştırıcısını views::lazy_split kullanmaktır. Aralık bağdaştırıcıları, görünüm sınıfları oluşturmanın amaçlanan yoludur. Görünüm türleri yalnızca kendi özel görünüm türünüzü oluşturmak istemeniz durumunda kullanıma sunulur.
1) Öğesi olmayan bir lazy_split_view oluşturun. Temel alınan görünüm varsayılan olarak oluşturulur. base() öğesinin V()bir kopyasını döndürür.
2) Sınırlayıcı dizisi kullanarak görünümü bölerek bir oluşturun lazy_split_view .
3) Bir sınırlayıcı öğesi kullanarak görünümü bölerek bir oluşturun lazy_split_view .
Örnek: lazy_split_view
// requires /std:c++20 or later
#include <ranges>
#include <iostream>
#include <vector>
int main()
{
std::vector<int> rg{ 1, 2, 3, 1, 2, 3, 4, 5, 6 };
// pipe syntax using range adaptor
for (const auto& subrange : rg | std::views::split(3))
{
// Outputs:
// 1 2
// 1 2
// 4 5 6
for (const auto& elem : subrange)
{
std::cout << elem << ' ';
}
std::cout << '\n';
}
int delimiters[] = {2, 3};
for (auto splitRange : std::views::split(rg, delimiters)) // ctor syntax
{
// outputs 1 1 4 5 6
for (auto& i : splitRange)
{
std::cout << i << " ";
}
}
}
1 2
1 2
4 5 6
1 1 4 5 6
base
Temel alınan görünümün bir kopyasını alır.
// Uses a copy constructor to return the underlying view
1) constexpr V base() const & requires std::copy_constructible<V>;
// Uses a move constructor to return the underlying view
2) 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();
constexpr auto begin() const requires forward_range<V> && forward_range<const V>
Parametreler
Hiçbiri.
Dönüş değeri
Görünümdeki ilk öğeye işaret eden bir yineleyici.
end
Görünümün sonunda sentinel'i alın.
1) constexpr auto end() const;
2) constexpr auto end() requires forward_range<V> && common_range<V>;
Parametreler
Hiçbiri.
Dönüş değeri
Görünümdeki son öğeyi izleyen sentinel:
Açıklamalar
2) Gereksinim forward_range<V> , görünümün V en az ileriye doğru yineleyicisi olduğu anlamına gelir. Aralık yineleyicileri hakkında daha fazla bilgi için bkz . Sınıf özelliklerini görüntüleme. Gereksinim, common_range<V> görünümün V aynı yineleyici ve sentinel türlerine sahip olduğu anlamına gelir.
Ayrıca bkz.
<ranges>
lazy_split range adaptorsplit_view sınıfı
sınıfları görüntüleme