std::ranges::views::transform, std::ranges::transform_view
出自cppreference.com
| 在標頭 <ranges> 定義
|
||
| (1) | (C++20 起) (C++23 前) |
|
| (C++23 起) | ||
| |
(2) | (C++20 起) |
| 調用簽名 |
||
| |
(C++20 起) | |
| |
(C++20 起) | |
1) 表示底層序列應用變換函數到每個元素後的 view 的範圍適配器。
2) 範圍適配器對象 (RangeAdaptorObject) 。對任意適合的表達式
e 與 f,表達式 views::transform(e, f) 表達式等價於 transform_view(e, f)。transform_view 分別在底層視圖 V 實現 random_access_range、bidirectional_range、forward_range、input_range、common_range 與 sized_range 時實現相應概念。
數據成員
| 成員 | 說明 |
V base_ (私有)
|
底層視圖 (僅用於闡述的成員對象*) |
copyable-box<F>(C++23 前)movable-box<F>(C++23 起) fun_ (私有)
|
底層函數對象 (僅用於闡述的成員對象*) |
成員函數
構造 transform_view (公開成員函數) | |
| 返回底層(適配的)視圖的副本 (公開成員函數) | |
| 返回指向起始的迭代器 (公開成員函數) | |
| 返回 指向末尾的迭代器或哨位 (公開成員函數) | |
| 返回元素數,僅當底層(適配的)範圍滿足 sized_range 時才提供 (公開成員函數) | |
(C++26) |
返回結果 approximately_sized_range 的估計大小 (公開成員函數) |
繼承自 ranges::view_interface | |
| 返回視圖是否為空,僅當視圖滿足 forward_range 時提供 ( std::ranges::view_interface<D> 的公開成員函數)
| |
(C++23) |
返回指向範圍起始的常量迭代器 ( std::ranges::view_interface<D> 的公開成員函數)
|
(C++23) |
返回對應於範圍常量迭代器的哨位 ( std::ranges::view_interface<D> 的公開成員函數)
|
| 返回派生視圖是否為非空,僅當 ranges::empty 可應用於它時提供 ( std::ranges::view_interface<D> 的公開成員函數)
| |
| 返回派生視圖中的首元素,僅當視圖滿足 forward_range 時提供 ( std::ranges::view_interface<D> 的公開成員函數)
| |
| 返回派生視圖中的末元素,僅當視圖滿足 bidirectional_range 與 common_range 時提供 ( std::ranges::view_interface<D> 的公開成員函數)
| |
返回派生視圖中的第 n 個元素,僅當視圖滿足 random_access_range 時提供 ( std::ranges::view_interface<D> 的公開成員函數)
| |
推導指引
嵌套類
| 迭代器類型 (僅用於闡述的成員類模板*) | |
| 哨位類型 (僅用於闡述的成員類模板*) |
示例
運行此代碼
#include <algorithm>
#include <cstdio>
#include <iterator>
#include <ranges>
#include <string>
char rot13a(const char x, const char a)
{
return a + (x - a + 13) % 26;
}
char rot13(const char x)
{
if ('Z' >= x and x >= 'A')
return rot13a(x, 'A');
if ('z' >= x and x >= 'a')
return rot13a(x, 'a');
return x;
}
int main()
{
auto show = [](const unsigned char x){ std::putchar(x); };
std::string in{"cppreference.com\n"};
std::ranges::for_each(in, show);
std::ranges::for_each(in | std::views::transform(rot13), show);
std::string out;
std::ranges::copy(std::views::transform(in, rot13), std::back_inserter(out));
std::ranges::for_each(out, show);
std::ranges::for_each(out | std::views::transform(rot13), show);
}
輸出:
cppreference.com
pccersrerapr.pbz
pccersrerapr.pbz
cppreference.com
參閱
(C++20) |
應用函數到元素範圍 (算法函數對象) |