lazy_split_view
class (C++標準連結庫)
根據分隔符將範圍分割成子範圍。 分隔符可以是單一專案或項目的檢視。 分隔符不屬於產生的子範圍。
與 lazy_split_view
之間的split_view
主要差異如下:
檢視 | 可以分割 const 範圍 |
範圍類型 |
---|---|---|
split_view |
否 | 支援 forward_range 或更新版本。 |
lazy_split_view |
是 | 支援 input_range 或更新版本。 |
讓「懶惰」的是,它不會尋找下一個 lazy_split_view
分隔符。 這表示它可以支援 input_range
,而 split_view
至少 forward_range
需要 。 這是因為 input_range
是單一傳遞,而 forward_range
允許多階段反覆運算。
偏好 split_view
因為它更有效率,除非您必須分割為 const
的範圍。 關於效能, split_view
更有效率。
的 lazy_split_view
反覆運算器遞增和比較比 較低 split_view
,但仍是 O(1)。 當分隔符之間的距離小到足以容納於CPU快取的子範圍時,會有 split_view
較佳的效能,在此情況下,分隔符外觀會有效地預先快取下一個子範圍。
語法
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>>
範本參數
Pattern
指定分隔符序列之檢視的類型。
需求 (forward_range<V> || tiny-range <Pattern>)
表示當基礎範圍不是 forward_range
時,分隔符必須是 tiny_range
。 tiny_range
是一個範圍,其大小為 0 或 1 的靜態範圍。 tiny_range<T>
sized_range<T>
需要 ,且 T::size()
必須是小於或等於 1 的常數表示式。
V
基礎檢視的類型。
特性
如需下列專案的描述,請參閱 檢視類別特性
範圍配接器:基礎範圍:lazy_split
必須滿足input_range
或更高的檢視反覆運算器類別:與基礎範圍元素類型:Sized 集合range_reference_t<V>
相同:沒有通用範圍:是,當基礎範圍同時為 forward_range
和 common
時。
借用範圍: 否 -iterable const
: 只有在基礎範圍滿足 forward_range
且 const
為 -iterable 時
成員
成員函式 | 說明 |
---|---|
建構函式 | 建構檢視。 |
base C++20 |
取得基礎範圍。 |
begin C++20 |
取得檢視中第一個專案的反覆運算器。 |
end C++20 |
取得檢視結尾的 sentinel。 |
繼承自 view_interface |
說明 |
empty C++20 |
測試檢視是否為空白。 |
front C++20 |
取得第一個專案。 |
operator bool C++20 |
測試檢視是否不是空的。 |
需求
標頭: <ranges>
(自C++20起)
命名空間:std::ranges
需要編譯程式選項:/std:c++20
或更新版本。
建構函式
建構的實例 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);
範本參數
Pattern
分隔符的類型。
R
範圍的型別。
V
基礎檢視的類型。
參數
e
單一專案,可識別要分割檢視的位置。 專案不是所產生子範圍的一部分。
base
基礎檢視。
pattern
項目檢視,可識別要分割檢視的位置。 項目的檢視不是所產生子範圍的一部分。
rg
要分割的範圍。
傳回值
lazy_split_view
包含一或多個subrange
的實例。
備註
建立 lazy_split_view
的最佳方式是使用 views::lazy_split
範圍配接器。 範圍配接器是建立檢視類別的預定方式。 只有在您想要建立自己的自定義檢視類型時,才會公開檢視類型。
1) 建立 lazy_split_view
沒有元素的 。 基礎檢視是預設建構的。 base()
會傳回的 V()
複本。
2) 使用分隔符序列分割檢視來建立 lazy_split_view
。
3) 使用分隔符專案分割檢視來建立 lazy_split_view
。
範例: 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
取得基礎檢視的複本。
// 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() &&;
參數
無。
傳回
基礎檢視。
begin
取得檢視中第一個專案的反覆運算器。
constexpr auto begin();
constexpr auto begin() const requires forward_range<V> && forward_range<const V>
參數
無。
傳回值
指向檢視中第一個專案的反覆運算器。
end
取得檢視結尾的 sentinel。
1) constexpr auto end() const;
2) constexpr auto end() requires forward_range<V> && common_range<V>;
參數
無。
傳回值
檢視中最後一個專案後面的 sentinel:
備註
2) 需求 forward_range<V>
表示檢視 V
至少具有正向反覆運算器。 如需範圍反覆運算器的詳細資訊,請參閱 檢視類別特性。 需求 common_range<V>
表示檢視 V
具有相同的反覆運算器和 sentinel 類型。