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.
Fungsi
Header <ranges>C++20 menyertakan fungsi pembantu non-anggota berikut.
| Fungsi non-anggota | Keterangan |
|---|---|
beginC++20 |
Dapatkan iterator ke elemen pertama dalam rentang. |
cbeginC++20 |
Dapatkan iterator const ke elemen pertama dalam rentang. |
cendC++20 |
Dapatkan sentinel di akhir constrentang -qualified. |
cdataC++20 |
const Dapatkan penunjuk ke elemen pertama dalam rentang yang berdampingan. |
crbeginC++20 |
Dapatkan iterator terbalik const ke awal rentang. |
crendC++20 |
Dapatkan sentinel di akhir pengembalian apa crbegin() . |
dataC++20 |
Dapatkan penunjuk ke elemen pertama dalam rentang yang berdampingan. |
emptyC++20 |
Uji apakah rentang kosong. |
endC++20 |
Dapatkan sentinel di akhir rentang. |
rbeginC++20 |
Dapatkan iterator terbalik ke awal rentang. |
rendC++20 |
Dapatkan iterator terbalik ke sentinel di akhir rentang. |
sizeC++20 |
Dapatkan ukuran rentang sebagai nilai yang tidak ditandatangani. |
ssizeC++20 |
Dapatkan ukuran rentang sebagai nilai yang ditandatangani. |
Banyak dari 'fungsi' ini diimplementasikan sebagai objek titik kustomisasi. Objek titik kustomisasi adalah objek fungsi yang dapat kelebihan beban pada jenis yang ditentukan pengguna, sekaligus memberlakukan batasan jenis jenis mana yang dapat diteruskan ke objek fungsi. Efek bersihnya adalah bahwa pengompilasi mengetahui apakah ada fungsi yang disesuaikan yang valid untuk memanggil jenis yang diteruskan, atau jika implementasi default harus digunakan, atau jika panggilan tidak dibentuk.
Banyak dari fungsi-fungsi ini memiliki fungsi yang sesuai di std namespace layanan. Tetapi saat bekerja dengan rentang, gunakan fungsi pembantu ini sebagai gantinya. Fungsi-fungsi ini menggunakan konsep C++20, yang memberikan kesalahan waktu kompilasi yang lebih baik. Karena diimplementasikan sebagai titik kustomisasi, masalah yang terkait dengan pencarian dependen argumen (ADL) dan kebenaran const dihindari.
begin
Dapatkan iterator ke elemen pertama dalam rentang.
template<class T>
constexpr std::input_or_output_iterator auto begin(T&& rg);
Parameter
T
Jenis rentang.
rg
Sebuah rentang.
Nilai hasil
Iterator ke elemen pertama dalam rentang:
Jika rentang adalah array, mengembalikan yang setara rg + 0dengan .
Jika auto(rg.begin()) menghasilkan iterator, mengembalikan yang setara auto(rg.begin())dengan . Jika ekspresi tersebut tidak terbentuk, auto(begin(rg)) digunakan jika ekspresi tersebut menghasilkan iterator.
Keterangan
ranges::begin() bekerja pada semua rentang, sedangkan std::begin() mungkin tidak.
Contoh: begin
// requires /std:c++20 or later
#include <vector>
#include <ranges>
#include <iostream>
int main()
{
std::vector<int> v = {10, 20, 30};
auto vi = std::ranges::begin(v);
std::cout << *vi << ' ' << *++vi; // outputs 10 20
}
cbegin
Dapatkan iterator const ke elemen pertama dalam rentang.
Iterator dapat mengakses elemen dalam rentang, tetapi tidak dapat memodifikasinya.
template<class T>
constexpr std::input_or_output_iterator auto cbegin(T&& rg);
Parameter
T
Jenis rentang.
rg
Sebuah rentang.
Nilai hasil
Iterator const ke elemen pertama dalam rentang:
Jika rentang adalah array, mengembalikan yang setara rg + 0dengan .
Jika auto(rg.cbegin()) menghasilkan iterator, mengembalikan yang setara auto(rg.cbegin())dengan . Jika ekspresi tersebut tidak terbentuk, auto(cbegin(rg)) digunakan jika ekspresi tersebut menghasilkan iterator.
Keterangan
ranges::cbegin() bekerja pada semua rentang, sedangkan std::cbegin() mungkin tidak.
Contoh: cbegin
// requires /std:c++20 or later
#include <vector>
#include <ranges>
#include <iostream>
int main()
{
std::vector<int> v = {10, 20, 30};
auto vi = std::ranges::cbegin(v);
std::cout << *vi; // outputs 10
// *vi = 100; // error because the iterator is const
}
cdata
const Dapatkan penunjuk ke elemen pertama dalam rentang yang berdampingan.
template<class T>
constexpr std::add_pointer_t<ranges::range_reference_t<const T>> cdata(T&& rg);
Parameter
T
Jenis rentang.
rg
Sebuah rentang.
Nilai hasil
Penunjuk const , berdasarkan jenis rentang, ke data elemen pertama dalam rentang yang berdampingan. Misalnya, jika rentang adalah vektor bilangan bulat, jenis nilai yang dikembalikan adalah const int *.
Contoh: cdata
#include <ranges>
#include <iostream>
int main()
{
std::vector v{10, 20, 30};
std::string src{ "a string" };
auto c_charPtr = std::ranges::cdata(src); // ptr is a const char *
auto c_intPtr = std::ranges::cdata(v); // ptr2 is a const int *
std::cout << c_charPtr << ", " << *c_intPtr << '\n'; // outputs a string, 10
// *c_intPtr = 100; // error - cannot assign to a const pointer
// *charPtr = 'A'; // error - cannot assign to a const pointer
}
cend
Dapatkan sentinel di akhir constrentang -qualified.
Iterator dapat mengakses elemen dalam rentang, tetapi tidak dapat memodifikasinya.
template<class T>
constexpr std::sentinel_for<decltype(ranges::cbegin(std::declval<T>()))> auto cend(T&& rg);
Parameter
T
Jenis rentang.
rg
Sebuah rentang.
Nilai hasil
Sentinel yang mengikuti elemen terakhir dalam constrentang -qualified:
Keterangan
ranges::cend() bekerja pada semua rentang, sedangkan std::cend() mungkin tidak.
Contoh: cend
// requires /std:c++20 or later
#include <vector>
#include <ranges>
#include <iostream>
int main()
{
std::vector<int> v = {10, 20, 30};
auto i = std::ranges::cend(v);
--i; // get off the sentinel and onto the last element in the range
std::cout << *i; // outputs 30
// *i = 300 // error because the iterator is const
}
crbegin
Dapatkan iterator terbalik const ke elemen pertama dalam rentang terbalik.
Iterator terbalik mengembalikan elemen rentang dalam urutan terbalik.
Rentang itu sendiri tidak terbalik; akses ke itu adalah.
template<class T>
constexpr std::input_or_output_iterator auto crbegin(T&& rg);
Parameter
T
Jenis rentang.
rg
Sebuah rentang.
Nilai hasil
Iterator terbalik const ke elemen pertama dalam rentang. Iterator ini mengembalikan elemen rentang dalam urutan terbalik, mulai dari akhir rentang:
Jika rentang adalah array, mengembalikan nilai yang setara reverse_iterator{rg + n} dengan di mana n adalah jumlah elemen dalam array.
Jika auto(rg.crbegin()) menghasilkan iterator, mengembalikan yang setara auto(rg.crbegin())dengan . Jika ekspresi tersebut tidak terbentuk, auto(crbegin(rg)) digunakan jika ekspresi tersebut menghasilkan iterator.
Keterangan
ranges::crbegin() bekerja pada semua rentang dua arah, sedangkan std::crbegin() mungkin tidak.
Contoh: crbegin
// requires /std:c++20 or later
#include <vector>
#include <ranges>
#include <iostream>
int main()
{
std::vector v{10, 20, 30};
auto vi = std::ranges::crbegin(v);
std::cout << *vi << ' ' << *++vi << ' ' << *++vi; // outputs 30 20 10
// vi[1] = 100; // error because the iterator is const
}
crend
Dapatkan sentinel di akhir pengembalian apa crbegin() .
Iterator terbalik mengembalikan elemen rentang dalam urutan terbalik.
Rentang itu sendiri tidak terbalik; akses ke itu adalah.
template<class T>
std::sentinel_for<decltype(ranges::crbegin(declval<T>()))> auto crend(T&& rg);
Parameter
T
Jenis rentang.
rg
Sebuah rentang.
Nilai hasil
Sentinel di akhir apa yang cbegin() kembali. Sentinel mengikuti elemen terakhir dalam tampilan rentang terbalik:
Keterangan
ranges::crend() bekerja pada semua rentang dua arah, sedangkan std::crend() mungkin tidak.
crend contoh
// requires /std:c++20 or later
#include <vector>
#include <ranges>
#include <iostream>
int main()
{
std::vector v{10, 20, 30};
auto vi = std::ranges::crend(v);
--vi; // get off the sentinel and onto the last element in the reversed range
std::cout << *vi; // outputs 10
// vi[0] = 300; // error because the iterator is const
std::cout << *vi << ' ' << *--vi << ' ' << *--vi; // outputs 10, 20, 30
}
data
Dapatkan penunjuk ke elemen pertama dalam rentang yang berdampingan.
template<class T>
constexpr std::add_pointer_t<ranges::range_reference_t<T>> data(T&& rg);
Parameter
T
Jenis rentang.
rg
Sebuah rentang.
Nilai hasil
Penunjuk, berdasarkan jenis rentang, ke elemen pertama dalam rentang yang berdampingan. Misalnya, jika rentang adalah vektor bilangan bulat, jenis nilai yang dikembalikan adalah int *.
Contoh
// requires /std:c++20 or later
#include <vector>
#include <ranges>
#include <iostream>
int main()
{
std::vector v{10, 20, 30};
std::string src{ "a string" };
auto charPtr = std::ranges::data(src); // charPtr is a char *
auto intPtr = std::ranges::data(v); // intPtr is an int *
std::cout << charPtr << ", " << *intPtr << '\n'; // outputs a string, 10
*intPtr = 100;
*charPtr = 'A';
std::cout << charPtr << ", " << *intPtr; // outputs A string, 100
}
empty
Uji apakah rentang kosong.
template<class T>
constexpr bool empty(T&& rg);
Parameter
T
Jenis rentang.
rg
Sebuah rentang.
Nilai hasil
Mengembalikan true jika rentang tidak memiliki elemen; jika tidak false.
Contoh
// requires /std:c++20 or later
#include <vector>
#include <ranges>
#include <iostream>
int main()
{
std::vector v{10,20,30};
std::vector<int> v2;
std::cout << std::boolalpha << std::ranges::empty(v); // outputs false
std::cout << std::boolalpha << ", " << std::ranges::empty(v2); // outputs true
}
end
Dapatkan sentinel di akhir rentang.
template<class T>
std::sentinel_for<ranges::iterator_t<T>> auto end(T&& rg);
Parameter
T
Jenis rentang.
rg
Sebuah rentang.
Nilai hasil
Sentinel yang mengikuti elemen terakhir dalam rentang:
Keterangan
ranges::end() bekerja pada semua rentang, sedangkan std::end() mungkin tidak.
Contoh
// requires /std:c++20 or later
#include <vector>
#include <ranges>
#include <iostream>
int main()
{
std::vector<int> v = {10, 20, 30};
auto i = std::ranges::end(v);
--i; // get off the sentinel and onto the last element in the range
std::cout << *i; // outputs 30
}
rbegin
Dapatkan iterator terbalik ke elemen pertama dalam rentang terbalik. Iterator terbalik mengembalikan elemen rentang dalam urutan terbalik. Rentang itu sendiri tidak terbalik; akses ke itu adalah.
template<class T>
constexpr std::input_or_output_iterator auto rbegin(T&& rg);
Parameter
T
Jenis rentang.
rg
Sebuah rentang.
Nilai hasil
Iterator terbalik ke elemen pertama dalam rentang. Iterator ini mengembalikan elemen rentang dalam urutan terbalik, mulai dari akhir rentang terbalik:
Jika rentang adalah array, mengembalikan nilai yang setara reverse_iterator{rg + n} dengan di mana n adalah jumlah elemen dalam array.
Jika auto(rg.rbegin()) menghasilkan iterator, mengembalikan yang setara auto(rg.rbegin())dengan . Jika ekspresi tersebut tidak terbentuk, auto(rbegin(rg)) digunakan jika ekspresi tersebut menghasilkan iterator.
Keterangan
ranges::rbegin() bekerja pada semua rentang dua arah, sedangkan std::rbegin() mungkin tidak.
Contoh
// requires /std:c++20 or later
#include <vector>
#include <ranges>
#include <iostream>
int main()
{
std::vector v{10, 20, 30};
auto vi = std::ranges::rbegin(v);
std::cout << *vi << ' ' << *++vi << ' ' << *++vi; // outputs 30 20 10
}
rend
Dapatkan iterator terbalik ke sentinel di akhir tampilan rentang terbalik. Iterator terbalik mengembalikan elemen rentang dalam urutan terbalik. Rentang itu sendiri tidak terbalik; akses ke itu adalah.
template<class T>
constexpr
std::sentinel_for<decltype(ranges::rbegin(std::declval<T>()))> auto rend(T&& rg);
Parameter
T
Jenis rentang.
rg
Sebuah rentang.
Nilai hasil
Iterator terbalik ke sentinel di akhir rentang. Sentinel mengikuti elemen terakhir dalam tampilan rentang terbalik:
Keterangan
ranges::rend() bekerja pada semua rentang dua arah, sedangkan std::rend() mungkin tidak.
Contoh
// requires /std:c++20 or later
#include <vector>
#include <ranges>
#include <iostream>
int main()
{
std::vector v{10, 20, 30};
auto vi = std::ranges::rend(v);
--vi; // get off the sentinel and onto the last element in the reversed range
std::cout << *vi; // outputs 10
std::cout << *vi << ' ' << *--vi << ' ' << *--vi; // outputs 10, 20, 30
}
size
Dapatkan jumlah elemen dalam rentang sebagai nilai yang tidak ditandatangani.
template<class T>
constexpr /*unsigned integer-like type */ size(T&& rg);
Parameter
T
Jenis rentang.
rg
Sebuah rentang.
Nilai hasil
Jumlah elemen dalam rentang sebagai nilai seperti bilangan bulat yang tidak ditandatangani.
Keterangan
Fungsi ini dijalankan dalam waktu konstan.
Contoh
// requires /std:c++20 or later
#include <vector>
#include <ranges>
#include <iostream>
int main()
{
std::vector v{10, 20, 30};
auto s = std::ranges::size(v); // s is a size_t
std::cout << s; // outputs 3
}
ssize
Dapatkan ukuran rentang sebagai nilai yang ditandatangani.
template<class T>
constexpr /* signed-integer-like type */ ssize(T&& rg);
Parameter
T
Jenis rentang.
rg
Sebuah rentang.
Nilai hasil
Jumlah elemen dalam rentang sebagai nilai seperti bilangan bulat yang ditandatangani.
Keterangan
Fungsi ini dijalankan dalam waktu konstan.
Contoh
// requires /std:c++20 or later
#include <vector>
#include <ranges>
#include <iostream>
int main()
{
std::vector v{10, 20, 30};
auto s = std::ranges::ssize(v);
std::cout << s; // outputs 3
}