<iterator>
işlevleri
advance
Belirtilen bir konum sayısıyla yineleyiciyi artırır.
template <class InputIterator, class Distance>
void advance(InputIterator& InIt, Distance Off);
Parametreler
InIt
Artırılacak ve bir girişi yineleyicisinin gereksinimleri karşılaması gereken yineleyici.
Off
Yineleyicinin fark türüne dönüştürülebilir ve yineleyici konumunun yükseltileceği artış sayısını belirten integral türü.
Açıklamalar
Aralık, yineleyicilerin başvurulmaz veya ucu geçmiş olması gereken nonsingular olmalıdır.
InputIterator
çift yönlü yineleyici türü gereksinimlerini karşılıyorsa, Off
negatif olabilir. Giriş veya iletilen yineleyici türüyse InputIterator
, Off
zorunlu olmamalıdır.
Advance işlevi, rastgele erişim yineleyicisinin gereksinimlerini karşıladığında InputIterator
sabit karmaşıklığa sahiptir; aksi takdirde doğrusal karmaşıklığa sahiptir ve bu da potansiyel olarak pahalıdır.
Örnek
// iterator_advance.cpp
// compile with: /EHsc
#include <iterator>
#include <list>
#include <iostream>
int main()
{
using namespace std;
list<int> L;
for (int i = 1; i < 9; ++i)
{
L.push_back(i);
}
list<int>::iterator LPOS = L.begin();
cout << "The list L is: ( ";
for (auto L_Iter = L.begin(); L_Iter != L.end(); L_Iter++)
{
cout << *L_Iter << " ";
}
cout << ")." << endl;
cout << "The iterator LPOS initially points to the first element: "
<< *LPOS << "." << endl;
advance(LPOS, 4);
cout << "LPOS is advanced 4 steps forward to point"
<< " to the fifth element: "
<< *LPOS << "." << endl;
advance(LPOS, -3);
cout << "LPOS is moved 3 steps back to point to the "
<< "2nd element: " << *LPOS << "." << endl;
}
The list L is: ( 1 2 3 4 5 6 7 8 ).
The iterator LPOS initially points to the first element: 1.
LPOS is advanced 4 steps forward to point to the fifth element: 5.
LPOS is moved 3 steps back to point to the 2nd element: 2.
back_inserter
Belirtilen kapsayıcının arkasında öğeler ekleyebilen bir yineleyici oluşturur.
template <class Container>
back_insert_iterator<Container> back_inserter(Container& Cont);
Parametreler
Cont
Geri eklemenin yürütülacağı kapsayıcı.
Dönüş Değeri
back_insert_iterator
kapsayıcı nesnesiyle Cont
ilişkilendirilmiş.
Açıklamalar
C++ Standart Kitaplığı'nın içinde bağımsız değişken, üye işlevine push_back
sahip üç sıralı kapsayıcıdan birine başvurmalıdır:deque
Sınıf, list
Sınıf veya vector
Sınıf.
Örnek
// iterator_back_inserter.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <iostream>
int main()
{
using namespace std;
vector<int> vec;
for (int i = 0; i < 3; ++i)
{
vec.push_back(i);
}
cout << "The initial vector vec is: ( ";
for (auto vIter = vec.begin(); vIter != vec.end(); vIter++)
{
cout << *vIter << " ";
}
cout << ")." << endl;
// Insertions can be done with template function
back_insert_iterator<vector<int> > backiter(vec);
*backiter = 30;
backiter++;
*backiter = 40;
// Alternatively, insertions can be done with the
// back_insert_iterator member function
back_inserter(vec) = 500;
back_inserter(vec) = 600;
cout << "After the insertions, the vector vec is: ( ";
for (auto vIter = vec.begin(); vIter != vec.end(); vIter++)
{
cout << *vIter << " ";
}
cout << ")." << endl;
}
The initial vector vec is: ( 0 1 2 ).
After the insertions, the vector vec is: ( 0 1 2 30 40 500 600 ).
begin
Belirtilen bir kapsayıcıdaki ilk öğe için bir yineleyici alır.
template <class Container>
auto begin(Container& cont) `
-> decltype(cont.begin());
template <class Container>
auto begin(const Container& cont) `
-> decltype(cont.begin());
template <class Ty, class Size>
Ty *begin(Ty (& array)[Size]);
Parametreler
cont
Bir kapsayıcı.
array
türünde Ty
bir nesne dizisi.
Dönüş Değeri
İlk iki şablon işlevi döndürür cont.begin()
. Birinci işlev sabit değil; ikinci sabittir.
Üçüncü şablon işlevi döndürür array
.
Örnek
Daha genel bir davranış gerektiğinde kapsayıcı üyesi begin()
yerine bu şablon işlevini kullanmanızı öneririz.
// cl.exe /EHsc /nologo /W4 /MTd
#include <algorithm>
#include <functional>
#include <iostream>
#include <iterator>
#include <vector>
template <typename C> void reverse_sort(C& c)
{
std::sort(std::begin(c), std::end(c), std::greater<>());
}
template <typename C> void print(const C& c)
{
for (const auto& e : c)
{
std::cout << e << " ";
}
std::cout << "\n";
}
int main()
{
std::vector<int> v = { 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1 };
print(v);
reverse_sort(v);
print(v);
std::cout << "--\n";
int arr[] = { 23, 70, 35, 106, 53, 160, 80, 40, 20, 10, 5, 16, 8, 4, 2, 1 };
print(arr);
reverse_sort(arr);
print(arr);
}
11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
52 40 34 26 20 17 16 13 11 10 8 5 4 2 1
--
23 70 35 106 53 160 80 40 20 10 5 16 8 4 2 1
160 106 80 70 53 40 35 23 20 16 10 8 5 4 2 1
işlevi reverse_sort
, üyesi olmayan sürümünü çağırdığı için normal dizilere ek olarak her türden kapsayıcıyı begin()
destekler. Kapsayıcı üyesini begin()
kullanmak için kodlamareverse_sort
:
template <typename C>
void reverse_sort(C& c) {
using std::begin;
using std::end;
std::sort(c.begin(), c.end(), std::greater<>());
}
Ardından bir dizi göndererek bu derleyici hatasına neden olur:
error C2228: left of '.begin' must have class/struct/union
cbegin
Belirtilen kapsayıcıdaki ilk öğeye sabit (salt okunur) bir yineleyici alır.
template <class Container>
auto cbegin(const Container& cont)
-> decltype(cont.begin());
Parametreler
cont
Bir kapsayıcı veya initializer_list
.
Dönüş Değeri
Sabit cont.begin()
.
Açıklamalar
Bu işlev tüm C++ Standart Kitaplığı kapsayıcılarıyla ve ile initializer_list
çalışır.
Dönüş değerinin olduğunu const_iterator
garanti etmek için şablon işlevinin begin()
yerine bu üye işlevini kullanabilirsiniz. Genellikle, aşağıdaki örnekte gösterildiği gibi tür kesinti anahtar sözcüğüyle auto
birlikte kullanılır. Örnekte, değiştirilebilir (non- const
) kapsayıcısı veya initializer_list
ve cbegin()
destekleyen begin()
herhangi bir tür olduğunu düşününContainer
.
auto i1 = Container.begin();
// i1 is Container<T>::iterator
auto i2 = Container.cbegin();
// i2 is Container<T>::const_iterator
cend
Belirtilen kapsayıcıdaki son öğeyi izleyen öğeye bir const (salt okunur) yineleyici alır.
template <class Container>
auto cend(const Container& cont)
-> decltype(cont.end());
Parametreler
cont
Bir kapsayıcı veya initializer_list
.
Dönüş Değeri
Sabit cont.end()
.
Açıklamalar
Bu işlev tüm C++ Standart Kitaplığı kapsayıcılarıyla ve ile initializer_list
çalışır.
Dönüş değerinin olduğunu const_iterator
garanti etmek için şablon işlevinin end()
yerine bu üye işlevini kullanabilirsiniz. Genellikle, aşağıdaki örnekte gösterildiği gibi tür kesinti anahtar sözcüğüyle auto
birlikte kullanılır. Örnekte, değiştirilebilir (non- const
) kapsayıcısı veya initializer_list
ve cend()
destekleyen end()
herhangi bir tür olduğunu düşününContainer
.
auto i1 = Container.end();
// i1 is Container<T>::iterator
auto i2 = Container.cend();
// i2 is Container<T>::const_iterator
crbegin
Kapsayıcının sonundan başlayarak kapsayıcının öğelerine ters salt okunur bir yineleyici alın.
template <class C> constexpr auto crbegin(const C& c) -> decltype(std::rbegin(c));
Parametreler
C
Kapsayıcının türü.
c
Kapsayıcı örneği.
Dönüş değeri
Bu yineleyici kapsayıcının sonundan başlayarak kapsayıcının öğelerini ters sırada döndürür.
Örnek: crbegin
#include <vector>
#include <iostream>
int main()
{
std::vector<int> v{10, 20, 30};
for (auto i = std::crbegin(v); i != std::crend(v); ++i)
{
std::cout << *i << ' '; // outputs 30 20 10
}
// v[1] = 100; // error because the iterator is const
}
30 20 10
crend
Salt okunur ters çevrilmiş öğe dizisinin sonunda sentinel'i alın.
template <class C> constexpr auto crend(const C& c) -> decltype(std::rend(c));
Parametreler
C
Kapsayıcının türü.
c
Kapsayıcı örneği.
Dönüş değeri
Sentinel, kapsayıcının ters çevrilmiş görünümündeki son öğeyi izler.
crend
örnek
#include <vector>
#include <iostream>
int main()
{
std::vector<int> v{10, 20, 30};
auto vi = std::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
}
10
data
Kapsayıcıdaki ilk öğeye bir işaretçi alın.
1) template <class C> constexpr auto data(C& c) -> decltype(c.data());
2) template <class C> constexpr auto data(const C& c) -> decltype(c.data());
3) template <class T, size_t N> constexpr T* data(T (&array)[N]) noexcept;
4) template <class E> constexpr const E* data(initializer_list<E> il) noexcept;
Parametreler
C
Kapsayıcının türü.
c
Kapsayıcı örneği.
E
Başlatıcı listesinin öğe türü.
il
Başlatıcı listesi.
N
Dizideki öğelerin sayısı
T
Dizideki verilerin türü.
Dönüş değeri
1, 2) Kapsayıcının türüne bağlı olarak ilk öğeye yönelik bir işaretçi. Örneğin, kapsayıcı tamsayılardan oluşan bir vektörse, dönüş değerinin türü bir int *
olur.
3) dizi olarak ilk öğeye yönelik bir işaretçi.
4) Başlatıcı listesinin ilk öğesinin işaretçisi.
Örnek data
#include <vector>
#include <iostream>
int main()
{
std::vector<int> v{ 10, 20, 30 };
std::string src{ "a string" };
const char *charPtr = std::data(src);
int* intPtr = std::data(v);
std::cout << charPtr << ", " << *intPtr << '\n'; // a string, 10
}
a string, 10
distance
İki yineleyici tarafından ele alınan konumlar arasındaki artış sayısını belirler.
template <class InputIterator>
typename iterator_traits<InputIterator>::difference_type distance(InputIterator first, InputIterator last);
Parametreler
first
İkinciye olan uzaklığı belirlenecek olan ilk yineleyici.
last
birinciden uzaklığı belirlenecek ikinci yineleyici.
Dönüş Değeri
değerine eşit olana kadar artırılması gereken sayıdır first
last
.
Açıklamalar
Uzaklık işlevi, rastgele erişim yineleyicisinin gereksinimlerini karşıladığında InputIterator
sabit karmaşıklığa sahiptir; aksi takdirde doğrusal karmaşıklığa sahiptir ve bu da potansiyel olarak pahalıdır.
Örnek
// iterator_distance.cpp
// compile with: /EHsc
#include <iterator>
#include <list>
#include <iostream>
int main()
{
using namespace std;
list<int> L;
for (int i = -1; i < 9; ++i)
{
L.push_back(2 * i);
}
list <int>::iterator L_Iter, LPOS = L.begin();
cout << "The list L is: ( ";
for (L_Iter = L.begin(); L_Iter != L.end(); L_Iter++)
{
cout << *L_Iter << " ";
}
cout << ")." << endl;
cout << "The iterator LPOS initially points to the first element: "
<< *LPOS << "." << endl;
advance(LPOS, 7);
cout << "LPOS is advanced 7 steps forward to point "
<< " to the eighth element: "
<< *LPOS << "." << endl;
list<int>::difference_type Ldiff;
Ldiff = distance(L.begin(), LPOS);
cout << "The distance from L.begin( ) to LPOS is: "
<< Ldiff << "." << endl;
}
The list L is: ( -2 0 2 4 6 8 10 12 14 16 ).
The iterator LPOS initially points to the first element: -2.
LPOS is advanced 7 steps forward to point to the eighth element: 12.
The distance from L.begin( ) to LPOS is: 7.
empty
template <class C> constexpr auto empty(const C& c) -> decltype(c.empty());
template <class T, size_t N> constexpr bool empty(const T (&array)[N]) noexcept;
template <class E> constexpr bool empty(initializer_list<E> il) noexcept;
Parametreler
C
Kapsayıcının türü.
c
Kapsayıcı örneği.
E
Başlatıcı listesinin öğe türü.
il
Başlatıcı listesi.
N
Dizideki öğelerin sayısı
T
Dizideki verilerin türü.
Dönüş değeri
Kapsayıcıda öğe yoksa döndürür true
; aksi takdirde false
döndürür.
Örnek
#include <vector>
#include <iostream>
int main()
{
std::vector<int> v{ 10,20,30 };
std::vector<int> v2;
std::cout << std::boolalpha << std::empty(v); // outputs false
std::cout << std::boolalpha << ", " << std::empty(v2); // outputs true
}
false, true
end
Belirtilen kapsayıcıdaki son öğeyi izleyen öğeye bir yineleyici alır.
template <class Container>
auto end(Container& cont)
-> decltype(cont.end());
template <class Container>
auto end(const Container& cont)
-> decltype(cont.end());
template <class Ty, class Size>
Ty *end(Ty (& array)[Size]);
Parametreler
cont
Bir kapsayıcı.
array
türünde Ty
bir nesne dizisi.
Dönüş Değeri
İlk iki şablon işlevi döndürür cont.end()
(birincisi sabit olmayan, ikincisi sabittir).
Üçüncü şablon işlevi döndürür array + Size
.
Açıklamalar
Kod örneği için bkz begin
. .
front_inserter
Belirtilen kapsayıcının önünde öğeler ekleyebilen bir yineleyici oluşturur.
template <class Container>
front_insert_iterator<Container> front_inserter(Container& Cont);
Parametreler
Cont
Ön öğesi eklenmiş olan kapsayıcı nesnesi.
Dönüş Değeri
front_insert_iterator
kapsayıcı nesnesiyle Cont
ilişkilendirilmiş.
Açıklamalar
front_insert_iterator sınıfının üye işlevi front_insert_iterator de kullanılabilir.
C++ Standart Kitaplığı'nın içinde bağımsız değişken üye işlevine push_back
sahip iki sıralı kapsayıcıdan birine başvurmalıdır: deque Class veya "list Class".
Örnek
// iterator_front_inserter.cpp
// compile with: /EHsc
#include <iterator>
#include <list>
#include <iostream>
int main()
{
using namespace std;
list<int> L;
for (int i = -1; i < 9; ++i)
{
L.push_back(i);
}
cout << "The list L is:\n ( ";
for (auto L_Iter = L.begin(); L_Iter != L.end(); L_Iter++)
{
cout << *L_Iter << " ";
}
cout << ")." << endl;
// Using the template function to insert an element
front_insert_iterator<list <int>> Iter(L);
*Iter = 100;
// Alternatively, you may use the front_insert member function
front_inserter(L) = 200;
cout << "After the front insertions, the list L is:\n ( ";
for (auto L_Iter = L.begin(); L_Iter != L.end(); L_Iter++)
{
cout << *L_Iter << " ";
}
cout << ")." << endl;
}
The list L is:
( -1 0 1 2 3 4 5 6 7 8 ).
After the front insertions, the list L is:
( 200 100 -1 0 1 2 3 4 5 6 7 8 ).
inserter
yerine insert_iterator<Container>(Cont, Where)
kullanmanıza inserter(Cont, Where)
olanak tanıyan yardımcı şablon işlevi.
template <class Container>
insert_iterator<Container>
inserter(
Container& Cont,
typename Container::iterator Where);
Parametreler
Cont
Yeni öğelerin eklendiği kapsayıcı.
Where
Ekleme noktasını buan bir yineleyici.
Açıklamalar
Şablon işlevi döndürür insert_iterator
<Container>(Cont, Where)
.
Örnek
// iterator_inserter.cpp
// compile with: /EHsc
#include <iterator>
#include <list>
#include <iostream>
int main()
{
using namespace std;
list<int> L;
for (int i = 2; i < 5; ++i)
{
L.push_back(10 * i);
}
cout << "The list L is:\n ( ";
for (auto L_Iter = L.begin(); L_Iter != L.end(); L_Iter++)
{
cout << *L_Iter << " ";
}
cout << ")." << endl;
// Using the template version to insert an element
insert_iterator<list<int>> Iter(L, L.begin());
*Iter = 1;
// Alternatively, using the member function to insert an element
inserter(L, L.end()) = 500;
cout << "After the insertions, the list L is:\n ( ";
for (auto L_Iter = L.begin(); L_Iter != L.end(); L_Iter++)
{
cout << *L_Iter << " ";
}
cout << ")." << endl;
}
The list L is:
( 20 30 40 ).
After the insertions, the list L is:
( 1 20 30 40 500 ).
make_checked_array_iterator
Diğer algoritmalar tarafından kullanılabilecek bir checked_array_iterator oluşturur.
Not
Bu işlev, C++ Standart Kitaplığı'nın bir Microsoft uzantısıdır. Bu işlev kullanılarak uygulanan kod bu Microsoft uzantısını desteklemeyen C++ Standart yapı ortamları için taşınabilir değildir.
template <class Iter>
checked_array_iterator<Iter>
make_checked_array_iterator(
Iter Ptr,
size_t Size,
size_t Index = 0);
Parametreler
Ptr
Hedef dizi için işaretçi.
Size
Hedef dizinin boyutu.
Index
Diziye isteğe bağlı dizin.
Dönüş Değeri
checked_array_iterator
öğesinin bir örneği.
Açıklamalar
make_checked_array_iterator
İşlev ad alanında stdext
tanımlanır.
Bu işlev normalde sınırların taşması konusunda endişeye neden olan bir ham işaretçi alır ve denetimi yapan bir checked_array_iterator sınıfına sarmalar. Bu sınıf işaretli olarak işaretlendiğinden, C++ Standart Kitaplığı bu konuda uyarı vermez. Daha fazla bilgi ve kod örnekleri için bkz . İşaretli Yineleyiciler.
Örnek
Aşağıdaki örnekte bir vektör oluşturulur ve 10 öğeyle doldurulur. Vektör içeriği kopyalama algoritması kullanılarak bir diziye kopyalanır ve ardından make_checked_array_iterator
hedefi belirtmek için kullanılır. Bunun ardından sınırların denetiminin bilerek ihlali gelir, böylece bir hata ayıklama onaylama işlemi hatası tetiklenir.
// make_checked_array_iterator.cpp
// compile with: /EHsc /W4 /MTd
#include <algorithm>
#include <iterator> // stdext::make_checked_array_iterator
#include <memory> // std::make_unique
#include <iostream>
#include <vector>
#include <string>
using namespace std;
template <typename C> void print(const string& s, const C& c)
{
cout << s;
for (const auto& e : c)
{
cout << e << " ";
}
cout << endl;
}
int main()
{
const size_t dest_size = 10;
// Old-school but not exception safe, favor make_unique<int[]>
// int* dest = new int[dest_size];
unique_ptr<int[]> updest = make_unique<int[]>(dest_size);
int* dest = updest.get(); // get a raw pointer for the demo
vector<int> v;
for (int i = 0; i < dest_size; ++i)
{
v.push_back(i);
}
print("vector v: ", v);
copy(v.begin(), v.end(), stdext::make_checked_array_iterator(dest, dest_size));
cout << "int array dest: ";
for (int i = 0; i < dest_size; ++i)
{
cout << dest[i] << " ";
}
cout << endl;
// Add another element to the vector to force an overrun.
v.push_back(10);
// ! The next line causes a debug assertion when it executes.
copy(v.begin(), v.end(), stdext::make_checked_array_iterator(dest, dest_size));
}
make_move_iterator
Sağlanan yineleyiciyi yineleyici olarak stored
içeren bir move iterator
oluşturur.
template <class Iterator>
move_iterator<Iterator>
make_move_iterator(const Iterator& It);
Parametreler
It
Yeni taşıma yineleyicisinde depolanan yineleyici.
Açıklamalar
Şablon işlevi döndürür move_iterator
<Iterator>(_It)
.
make_unchecked_array_iterator
Diğer algoritmalar tarafından kullanılabilecek bir unchecked_array_iterator oluşturur.
Not
Bu işlev, C++ Standart Kitaplığı'nın bir Microsoft uzantısıdır. Bu işlev kullanılarak uygulanan kod bu Microsoft uzantısını desteklemeyen C++ Standart yapı ortamları için taşınabilir değildir.
template <class Iter>
unchecked_array_iterator<Iter>
make_unchecked_array_iterator(Iter Ptr);
Parametreler
Ptr
Hedef dizi için işaretçi.
Dönüş Değeri
unchecked_array_iterator
öğesinin bir örneği.
Açıklamalar
make_unchecked_array_iterator
İşlev ad alanında stdext
tanımlanır.
Bu işlev ham bir işaretçi alır ve hiçbir denetim gerçekleştirmez ve bu nedenle hiçbir şey için iyileştirir, ancak C4996 gibi derleyici uyarılarını da sessize alır. Bu nedenle, denetlenmemiş işaretçi uyarılarıyla onları genel olarak susturmadan veya denetleme maliyeti oluşturmadan baş etmek için hedeflenmiş bir yoldur. Daha fazla bilgi ve kod örnekleri için bkz . İşaretli Yineleyiciler.
Örnek
Aşağıdaki örnekte bir vektör oluşturulur ve 10 öğeyle doldurulur. Vektör içeriği kopyalama algoritması kullanılarak bir diziye kopyalanır ve ardından make_unchecked_array_iterator
hedefi belirtmek için kullanılır.
// make_unchecked_array_iterator.cpp
// compile with: /EHsc /W4 /MTd
#include <algorithm>
#include <iterator> // stdext::make_unchecked_array_iterator
#include <iostream>
#include <vector>
#include <string>
using namespace std;
template <typename C> void print(const string& s, const C& c)
{
cout << s;
for (const auto& e : c)
{
cout << e << " ";
}
cout << endl;
}
int main()
{
const size_t dest_size = 10;
int* dest = new int[dest_size];
vector<int> v;
for (int i = 0; i < dest_size; ++i)
{
v.push_back(i);
}
print("vector v: ", v);
// COMPILER WARNING SILENCED: stdext::unchecked_array_iterator is marked as checked in debug mode
// (it performs no checking, so an overrun will trigger undefined behavior)
copy(v.begin(), v.end(), stdext::make_unchecked_array_iterator(dest));
cout << "int array dest: ";
for (int i = 0; i < dest_size; ++i)
{
cout << dest[i] << " ";
}
cout << endl;
delete[] dest;
}
vector v: 0 1 2 3 4 5 6 7 8 9
int array dest: 0 1 2 3 4 5 6 7 8 9
next
Belirtilen sayıda yineler ve yeni yineleyici konumunu döndürür.
template <class InputIterator>
InputIterator next(
InputIterator first,
typename iterator_traits<InputIterator>::difference_type off = 1);
Parametreler
first
Geçerli konum.
off
Yineleme sayısı.
Dönüş Değeri
Yineleme sürelerinin ardından off
yeni yineleyici konumunu döndürür.
Açıklamalar
Şablon işlevi artımlı off
süreler döndürür next
prev
Belirtilen sayıda geri yineler ve yeni yineleyici konumunu döndürür.
template <class BidirectionalIterator>
BidirectionalIterator prev(
BidirectionalIterator first,
typename iterator_traits<BidirectionalIterator>::difference_type off = 1);
Parametreler
first
Geçerli konum.
off
Yineleme sayısı.
Açıklamalar
Şablon işlevi azalan off
süreler döndürürnext
.
rbegin
Kapsayıcının öğelerini ters sırada döndüren bir yineleyici alın.
template <class C> constexpr auto rbegin(C& c) -> decltype(c.rbegin());
template <class C> constexpr auto rbegin(const C& c) -> decltype(c.rbegin());
Parametreler
C
Kapsayıcının türü.
c
Kapsayıcı örneği.
Dönüş değeri
Döndürülen yineleyici, ters çevrilmiş aralığın sonundan başlayarak kapsayıcının öğelerini ters sırada sunar.
Örnek rbegin
#include <vector>
#include <iostream>
int main()
{
std::vector<int> v{ 10, 20, 30 };
for (auto e = std::rbegin(v); e != std::rend(v); ++e)
{
std::cout << *e << ' '; // outputs 30 20 10
}
}
30 20 10
rend
Ters çevrilmiş öğe dizisinin sonunda sentinel'i alın.
template <class C> constexpr auto rend(C& c)-> decltype(c.rend());
template <class C> constexpr auto rend(const C& c) -> decltype(c.rend());
Parametreler
C
Kapsayıcının türü.
c
Kapsayıcı örneği.
Dönüş değeri
Kapsayıcının sonundaki sentinel için ters yineleyici. Sentinel, kapsayıcının ters çevrilmiş görünümündeki son öğeyi izler:
rend
örnek
#include <vector>
#include <iostream>
int main()
{
std::vector<int> v{10, 20, 30};
auto vi = std::rend(v);
--vi; // get off the sentinel and onto the last element in the reversed range
std::cout << *vi; // outputs 10
}
10
size
template <class C> constexpr auto size(const C& c)
-> decltype(c.size());
template <class T, size_t N> constexpr size_t size(const T (&array)[N]) noexcept;
Parametreler
C
Kapsayıcının türü.
c
Kapsayıcı örneği.
N
Dizideki öğelerin sayısı
T
Dizideki verilerin türü.
Dönüş değeri
Kapsayıcıdaki öğelerin işaretsiz tamsayı benzeri bir değer olarak sayısı.
Örnek size
#include <vector>
#include <iostream>
int main()
{
std::vector<int> v{ 10, 20, 30 };
size_t s = std::size(v);
std::cout << s; // outputs 3
}
3