- •Int main()
- •Int main()
- •Int main()
- •Int main()
- •Int main()
- •Int main()
- •Int main()
- •Int main ()
- •Int main()
- •Int main()
- •Int main()
- •Int main(){
- •Int main(){
- •Int main(){
- •Int main(){
- •Int main(){
- •Int main(){
- •Int main(){
- •Int main(){
- •Int main(){
- •Int main(){
- •Int main(){
- •Int main(){
- •Int main(){
Int main(){
Array a(20);
Array::iterator iter;
For (iter = a.begin(); iter!=a.end;++iter) {cout << *iter<< endl;}
В stl метод end() контейнера возвращает итератор несуществующего элемента (того, что после последнего).
Для динамических массивов vector<> есть итераторы произвольного доступа. Им разрешены операции инкремента (++), которые возвращают итератор следующего элемента контейнера и декремента (--) для предыдущего.
Определен итератор, не связанный с элементами контейнера (“итератор несуществующего элемента”). Он относится к элементу после последнего.
Операции ++ и – относятся к итераторам, а не контейнерам.
Операция * разадресации возвращает элемент контейнера, связанный с итератором. Для итераторов произвольного доступа операция индексирования [] – возвращает ссылку на i-й элемент.
Для списков – контейнер list<> определены двунаправленные итераторы.
Iterator:
Разрешено:
++, --, ==, !=, *, =
Не разрешено: []
Однонаправленные итераторы:
ForwardIterator
Разрешено:
++, =, ==, !=, *
<iterator>
Istream_iterator<>
Ostream_iterator<>
Reverse_iterator
Тоже бывают произвольного доступа, одно- и двунаправленные, но работают от конца к началу.
Базовые последовательности
Vector<> <- итераторы произвольного доступа.
List<> <- двунаправленные итераторы.
Deque<> <- итераторы произвольного доступа.
Для последовательностей определены операции:
= присвоение
==, != - для содержимого.
<, <=< >, => - для размеров.
Предыдущие два пункта вместе взятые – сравнения.
Вызов итератора
Vector<int>::iterator iter1;
List<int>::iterator iter2;
Методы:
Iterator begin(); - возвращает итератор первого элемента.
Iterator end(); - возвращает итератор несуществующего элемента, следующего за последним.
Reverce_iterator rbegin(); - возвращает обратны итератор на последний элемент контейнера.
Reverce_iterator rend(); - возвращает обратный итератор на элемент, предшествующий первому.
Size_t
Unsigned size(); - количество элементов в контейнере.
Unsigned max_size(); - максимальное количество, которое можно поместить в контейнер.
Bool empty(); - возвращает true, если контейнер пуст.
Vector<T>
Reference -> T f //ссылка на элемент контейнера. Имя, объявленное в каждом итераторе.
Reference front(); - ссылка на первый элемент.
Reference back(); - ссылка на последний элемент.
Void push_back (int value_type); - добавляет новый элемент в конец контейнера.
Value_type -> T // тип элементов, хранящихся в контейнере.
Void pop_back(); - удаляет последний элемент последовательности.
Void assign(); - перегруженный метод. Задает значение для всех элементов.
Iterator insert(); - тоже перегружен. Можно им вставить 1 или несколько элементов в контейнер.
Аргумент – итератор элемента, перед которым производится вставка, а далее или значение, или два итератора – диапазон элементов, вставляемых в контейнер (из другого контейнера, например).
Iterator erace(); - позволяет удалять элементы из последовательности. Если аргумент – 1 итератор, то удаляется он. Если 2 итератора, то диапазон.
Void clear(); - удаляет все элементы из контейнера.
Пример:
Добавление 10 целых значений в динамический массив и вывод их значений на консоль в прямом и обратном порядке (с использованием итераторов).
#include <iostream>
#include <vactor>
Using namespace std;
