Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Tampilan elemen, yang masing-masing adalah transformasi elemen dalam rentang yang ditentukan.
Sintaks
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>>;
Parameter template
F
Jenis objek fungsi yang mengubah elemen.
V
Jenis tampilan yang mendasar.
Melihat karakteristik
Untuk deskripsi entri berikut, lihat Menampilkan karakteristik kelas
| Karakteristik | Deskripsi |
|---|---|
| Adaptor rentang | views::transform |
| Rentang yang mendasar | Harus memuaskan input_range atau lebih tinggi |
| Jenis elemen | Sama seperti jenis pengembalian fungsi transformasi. |
| Lihat kategori iterator | Mendukung hingga random_access_range, tergantung pada rentang yang mendasar input_range |
| Ukuran | Hanya jika rentang yang mendasar memenuhi sized_range |
Apakah const-iterable |
Hanya jika rentang yang mendasar dapat diulang const dan transformasi berfungsi pada const referensi. |
| Rentang umum | Hanya jika rentang yang mendasar memenuhi common_range |
| Rentang yang dipinjam | No |
Anggota
| Fungsi anggota | Keterangan |
|---|---|
| KonstruktorC++20 | Buat tampilan. |
baseC++20 |
Dapatkan rentang yang mendasar. |
beginC++20 |
Dapatkan iterator ke elemen pertama. |
endC++20 |
Dapatkan sentinel di akhir tampilan. |
sizeC++20 |
Dapatkan jumlah elemen. Rentang yang mendasar harus memuaskan sized_range. |
Diwariskan dari view_interface |
Keterangan |
backC++20 |
Dapatkan elemen terakhir. |
emptyC++20 |
Uji apakah tampilan kosong. |
frontC++20 |
Dapatkan elemen pertama. |
operator boolC++20 |
Uji apakah tampilan tidak kosong. |
operator[]C++20 |
Dapatkan elemen pada posisi yang ditentukan. |
Persyaratan
Header: <ranges> (sejak C++20)
kumpulan nama XML: std::ranges
Opsi Pengkompilasi: /std:c++20 atau yang lebih baru diperlukan.
Konstruktor
Membuat instans transform_view
1) transform_view() requires default_initializable<V>
&& default_initializable<F> = default;
2) constexpr transform_view(V base, F func);
Parameter
base
Tampilan yang mendasar.
func
Fungsi yang mengubah setiap elemen.
Untuk informasi tentang jenis parameter templat, lihat Parameter templat.
Nilai hasil
Instans transform_view.
Keterangan
Cara terbaik untuk membuat adalah transform_view dengan menggunakan views::transform adaptor rentang. Adaptor rentang adalah cara yang dimaksudkan untuk membuat kelas tampilan. Jenis tampilan diekspos jika Anda ingin membuat jenis tampilan kustom Anda sendiri.
1) Buat nilai yang diinisialisasi transform_view. Fungsi transformasi dan tampilan yang mendasar harus dapat diinisialisasi secara default.
2) Pindahkan konstruksi transform_view dari base tampilan dan fungsi functransformasi . Keduanya base dan func dipindahkan melalui std::move().
Contoh: 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
Dapatkan tampilan yang mendasar.
// 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() &&;
Parameter
Tidak ada.
Mengembalikan
Tampilan yang mendasar.
begin
Dapatkan iterator ke elemen pertama dalam tampilan.
constexpr auto begin();
Nilai hasil
Iterator yang menunjuk pada elemen pertama dalam tampilan. Perilaku tidak terdefinisi jika tampilan tidak memiliki predikat.
end
Dapatkan sentinel di akhir tampilan.
constexpr auto end()
Nilai hasil
Sentinel yang mengikuti elemen terakhir dalam tampilan:
size
Dapatkan jumlah elemen dalam tampilan.
constexpr auto size() requires ranges::sized_range<V>;
constexpr auto size() const requires ranges::sized_range<const V>;
Parameter
Tidak ada.
Nilai hasil
Jumlah elemen dalam tampilan.