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.
<ranges>C++20 üst bilgisi aşağıdaki üye olmayan yardımcı işlevleri içerir.
| Üye olmayan işlevler | Açıklama |
|---|---|
beginC++20 |
Aralıktaki ilk öğeye bir yineleyici alın. |
cbeginC++20 |
Aralıktaki ilk öğeye bir const yineleyici alın. |
cendC++20 |
-qualified aralığının sonundaki sentinel'i constalın. |
cdataC++20 |
const Bitişik aralıktaki ilk öğeye bir işaretçi alın. |
crbeginC++20 |
Aralığın başına ters const bir yineleyici alın. |
crendC++20 |
Dönüşlerin sonunda sentinel'i crbegin() alın. |
dataC++20 |
Bitişik aralıktaki ilk öğeye bir işaretçi alın. |
emptyC++20 |
Aralığın boş olup olmadığını test edin. |
endC++20 |
Aralığın sonundaki sentinel'i alın. |
rbeginC++20 |
Aralığın başına ters bir yineleyici alın. |
rendC++20 |
Aralığın sonundaki sentinel için ters yineleyici alın. |
sizeC++20 |
Aralığın boyutunu işaretsiz bir değer olarak alın. |
ssizeC++20 |
Aralığın boyutunu imzalı değer olarak alır. |
Bu 'işlevlerin' çoğu özelleştirme noktası nesneleri olarak uygulanır. Özelleştirme noktası nesnesi, kullanıcı tanımlı türlerde aşırı yüklenebilen bir işlev nesnesidir ve aynı zamanda işlev nesnesine hangi tür türlerinin geçirilebileceğine yönelik kısıtlamalar da zorunlu hale getirin. Bunun net etkisi, derleyicinin geçirilen türü için çağrı yapmak için geçerli bir özelleştirilmiş işlev olup olmadığını veya varsayılan uygulamanın kullanılması gerekip gerekmediğini veya çağrının kötü biçimlendirilmiş olup olmadığını anladığıdır.
Bu işlevlerin birçoğunun ad alanında std karşılık gelen işlevleri vardır. Ancak aralıklarla çalışırken bunun yerine bu yardımcı işlevleri kullanın. Bu işlevler, daha iyi derleme zamanı hataları sağlayan C++20 kavramlarını kullanır. Bunlar özelleştirme noktaları olarak uygulandığından bağımsız değişkene bağımlı arama (ADL) ve sabit doğrulukla ilgili sorunlardan kaçınılır.
begin
Aralıktaki ilk öğeye bir yineleyici alın.
template<class T>
constexpr std::input_or_output_iterator auto begin(T&& rg);
Parametreler
T
Aralığın türü.
rg
Bir aralık.
Dönüş değeri
Aralıktaki ilk öğeye bir yineleyici:
Aralık bir diziyse, eşdeğerini rg + 0döndürür.
auto(rg.begin()) Yineleyici verirse, eşdeğerini auto(rg.begin())döndürür. Bu ifade hatalı biçimlendirilmişse, auto(begin(rg)) bu ifade yineleyici verirse kullanılır.
Açıklamalar
ranges::begin() tüm aralıklarda çalışır, ancak std::begin() çalışmayabilir.
Örnek: 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
Aralıktaki const ilk öğeye yineleyici alma.
Yineleyici aralıktaki öğelere erişebilir, ancak bunları değiştiremez.
template<class T>
constexpr std::input_or_output_iterator auto cbegin(T&& rg);
Parametreler
T
Aralığın türü.
rg
Bir aralık.
Dönüş değeri
const Aralıktaki ilk öğeye bir yineleyici:
Aralık bir diziyse, eşdeğerini rg + 0döndürür.
auto(rg.cbegin()) Yineleyici verirse, eşdeğerini auto(rg.cbegin())döndürür. Bu ifade hatalı biçimlendirilmişse, auto(cbegin(rg)) bu ifade yineleyici verirse kullanılır.
Açıklamalar
ranges::cbegin() tüm aralıklarda çalışır, ancak std::cbegin() çalışmayabilir.
Örnek: 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 Bitişik aralıktaki ilk öğeye bir işaretçi alın.
template<class T>
constexpr std::add_pointer_t<ranges::range_reference_t<const T>> cdata(T&& rg);
Parametreler
T
Aralığın türü.
rg
Bir aralık.
Dönüş değeri
const Aralık türüne bağlı olarak bitişik aralıktaki ilk öğe verilerine yönelik bir işaretçi. Örneğin, aralık tamsayılardan oluşan bir vektörse, dönüş değerinin türü bir const int *olur.
Örnek: 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
-qualified aralığının sonundaki sentinel'i constalın.
Yineleyici aralıktaki öğelere erişebilir, ancak bunları değiştiremez.
template<class T>
constexpr std::sentinel_for<decltype(ranges::cbegin(std::declval<T>()))> auto cend(T&& rg);
Parametreler
T
Aralığın türü.
rg
Bir aralık.
Dönüş değeri
-qualified aralığındaki son öğeyi constizleyen sentinel:
Açıklamalar
ranges::cend() tüm aralıklarda çalışır, ancak std::cend() çalışmayabilir.
Örnek: 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
Ters çevrilmiş aralıktaki ilk öğeye ters const yineleyici alın.
Ters yineleyici, aralığın öğelerini ters sırada döndürür.
Aralığın kendisi ters çevrilmiyor; erişimi vardır.
template<class T>
constexpr std::input_or_output_iterator auto crbegin(T&& rg);
Parametreler
T
Aralığın türü.
rg
Bir aralık.
Dönüş değeri
Aralıktaki ilk öğeye ters const yineleyici. Bu yineleyici, aralığın sonundan başlayarak aralığın öğelerini ters sırada döndürür:
Aralık bir diziyse, dizideki öğelerin sayısı olan konumun n eşdeğerini reverse_iterator{rg + n} döndürür.
auto(rg.crbegin()) Yineleyici verirse, eşdeğerini auto(rg.crbegin())döndürür. Bu ifade hatalı biçimlendirilmişse, auto(crbegin(rg)) bu ifade yineleyici verirse kullanılır.
Açıklamalar
ranges::crbegin() tüm çift yönlü aralıklarda çalışır, ancak std::crbegin() çalışmayabilir.
Örnek: 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
Dönüşlerin sonunda sentinel'i crbegin() alın.
Ters yineleyici, aralığın öğelerini ters sırada döndürür.
Aralığın kendisi ters çevrilmiyor; erişimi vardır.
template<class T>
std::sentinel_for<decltype(ranges::crbegin(declval<T>()))> auto crend(T&& rg);
Parametreler
T
Aralığın türü.
rg
Bir aralık.
Dönüş değeri
Dönüşlerin sonundaki cbegin() sentinel. Sentinel, aralığın ters çevrilmiş görünümündeki son öğeyi izler:
Açıklamalar
ranges::crend() tüm çift yönlü aralıklarda çalışır, ancak std::crend() çalışmayabilir.
crend örnek
// 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
Bitişik aralıktaki ilk öğeye bir işaretçi alın.
template<class T>
constexpr std::add_pointer_t<ranges::range_reference_t<T>> data(T&& rg);
Parametreler
T
Aralığın türü.
rg
Bir aralık.
Dönüş değeri
Aralık türüne göre bitişik aralıktaki ilk öğeye yönelik bir işaretçi. Örneğin, aralık tamsayılardan oluşan bir vektörse, dönüş değerinin türü bir int *olur.
Örnek
// 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
Aralığın boş olup olmadığını test edin.
template<class T>
constexpr bool empty(T&& rg);
Parametreler
T
Aralığın türü.
rg
Bir aralık.
Dönüş değeri
Aralıkta öğe yoksa döndürür true ; aksi takdirde false.
Örnek
// 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
Aralığın sonundaki sentinel'i alın.
template<class T>
std::sentinel_for<ranges::iterator_t<T>> auto end(T&& rg);
Parametreler
T
Aralığın türü.
rg
Bir aralık.
Dönüş değeri
Aralıktaki son öğeyi izleyen sentinel:
Açıklamalar
ranges::end() tüm aralıklarda çalışır, ancak std::end() çalışmayabilir.
Örnek
// 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
Ters çevrilmiş aralıktaki ilk öğeye ters yineleyici alın. Ters yineleyici, aralığın öğelerini ters sırada döndürür. Aralığın kendisi ters çevrilmiyor; erişimi vardır.
template<class T>
constexpr std::input_or_output_iterator auto rbegin(T&& rg);
Parametreler
T
Aralığın türü.
rg
Bir aralık.
Dönüş değeri
Aralıktaki ilk öğeye ters yineleyici. Bu yineleyici, ters çevrilmiş aralığın sonundan başlayarak aralığın öğelerini ters sırada döndürür:
Aralık bir diziyse, dizideki öğelerin sayısı olan konumun n eşdeğerini reverse_iterator{rg + n} döndürür.
auto(rg.rbegin()) Yineleyici verirse, eşdeğerini auto(rg.rbegin())döndürür. Bu ifade hatalı biçimlendirilmişse, auto(rbegin(rg)) bu ifade yineleyici verirse kullanılır.
Açıklamalar
ranges::rbegin() tüm çift yönlü aralıklarda çalışır, ancak std::rbegin() çalışmayabilir.
Örnek
// 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
Aralığın tersine çevrilmiş görünümünün sonunda sentinel'e ters yineleyici alın. Ters yineleyici, aralığın öğelerini ters sırada döndürür. Aralığın kendisi ters çevrilmiyor; erişimi vardır.
template<class T>
constexpr
std::sentinel_for<decltype(ranges::rbegin(std::declval<T>()))> auto rend(T&& rg);
Parametreler
T
Aralığın türü.
rg
Bir aralık.
Dönüş değeri
Aralığın sonundaki sentinel için ters yineleyici. Sentinel, aralığın ters çevrilmiş görünümündeki son öğeyi izler:
Açıklamalar
ranges::rend() tüm çift yönlü aralıklarda çalışır, ancak std::rend() çalışmayabilir.
Örnek
// 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
Aralıktaki öğelerin sayısını işaretsiz bir değer olarak alır.
template<class T>
constexpr /*unsigned integer-like type */ size(T&& rg);
Parametreler
T
Aralığın türü.
rg
Bir aralık.
Dönüş değeri
Aralıktaki öğelerin işaretsiz tamsayı benzeri bir değer olarak sayısı.
Açıklamalar
Bu işlev sabit sürede yürütülür.
Örnek
// 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
Aralığın boyutunu imzalı değer olarak alır.
template<class T>
constexpr /* signed-integer-like type */ ssize(T&& rg);
Parametreler
T
Aralığın türü.
rg
Bir aralık.
Dönüş değeri
Aralıktaki öğelerin imzalı tamsayı benzeri bir değer olarak sayısı.
Açıklamalar
Bu işlev sabit sürede yürütülür.
Örnek
// 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
}