§ 14. Пераўтварэнне элементаў масіву
14.4. Паняцце ітэратара
Ітэратар — абагульнены паказальнік [1], які дазваляе карыстальніку перабіраць без неабходнасці ведаць, як рэалізаваны сам кантэйнер. Вектар з’яўляецца кантэйнерам, у якім рэалізаваны паслядоўны доступ да элементаў, ітэратар дазваляе абысці ўсе элементы вектара, перамяшчэнне адбываецца элемент за элементам. Ітэратары дазваляюць звяртацца да элементаў вектара без выкарыстання індэксаў. Для вектара вызначаны стандартныя ітэратары begin() і end(). Итэратар begin() паказвае на першы элемент у вектары. Ітэратар end() — на месца пасля апошняга элемента вектара. Для любога ітэратара (it) даступныя наступныя аперацыі (прыклад 14.6):
Для вектара ітэратар забяспечвае дадатковую функцыянальнасць:
Пачынаючы са стандарта C++11, абход вектара з дапамогай vector <int> a(n); for (auto i: a) cout << i << " "; [1] Паказальнік — пераменная, якая абазначае адрас памяці. Паказальнік прызначаны для прамога звароту па адрасе памяці да аб’екта, які размешчаны па гэтым адрасе. |
Для вектара вызначаны таксама рэверсіўныя (адваротныя) ітэратары, якія дазваляюць перабіраць элементы кантэйнера ў адваротным напрамку. Для атрымання рэверсіўнага ітэратара ўжываюцца функцыі rbegin() і rend(). Итэратар rbegin()паказвае на канец бягучага вектара, а ітэратар rend() — на пачатак вектара. Прыклад 14.6. Аперацыі з ітэратарам
Разгледзім аперацыю:
Ітэратар it паказвае на пачатак вектара. Значэнне пераменнай x — значэнне элемента вектара, на які паказвае ітэратар. Будзе выведзена значэнне 1.
Ітэратар зрушыўся на адзін элемент і цяпер паказвае на элемент з індэксам 1, будзе выведзена значэнне 2.
Ітэратар зрушыўся на 3 элементы ад пачатку і паказвае на элемент з індэксам 3, будзе выведзена значэнне 5.
Пасля папярэдняй аперацыі ітэратар паказвае на элемент з індэксам 3, таму будзе выведзена false.
Будуць выведзены значэнні 3 і 5. Значэнне 5 — колькасць элементаў у вектары. Цыклу foreach адпавядае наступны запіс цыкла for:
або
|