12.4.2. Обратные итераторы
12.4.2. Обратные итераторы
Операции begin() и end() возвращают соответственно итераторы, указывающие на первый элемент и на элемент, расположенный за последним. Можно также вернуть обратный итератор, обходящий контейнер от последнего элемента к первому. Во всех контейнерах для поддержки такой возможности используются операции rbegin() и rend(). Есть константные и неконстантные версии обратных итераторов:
vector int vec0;
const vector int vec1;
vector int ::reverse_iterator r_iter0 = vec0.rbegin();
vector int ::const_reverse_iterator r_iter1 = vec1.rbegin();
Обратный итератор применяется так же, как прямой. Разница состоит в реализации операторов перехода к следующему и предыдущему элементам. Для прямого итератора оператор ++ дает доступ к следующему элементу контейнера, тогда как для обратного – к предыдущему. Например, для обхода вектора в обратном направлении следует написать:
// обратный итератор обходит вектор от конца к началу
vector type ::reverse_iterator r_iter;
for ( r_iter = vec0.rbegin(); // r_iter указывает на последний элемент
r_iter != vec0.rend(); // пока не достигли элемента перед первым
r_iter++ ) // переходим к предыдущему элементу
{ /* ... */ }
Инвертирование семантики операторов инкремента и декремента может внести путаницу, но зато позволяет программисту передавать алгоритму пару обратных итераторов вместо прямых. Так, для сортировки вектора в порядке убывания мы передаем алгоритму
// сортирует вектор в порядке возрастания
sort( vec0.begin(), vec0.end() );
// сортирует вектор в порядке убывания
sort() пару обратных итераторов:
sort( vec0.rbegin(), vec0.rend() );
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
5.24.3 Обратные запросы ARP
5.24.3 Обратные запросы ARP Один из вариантов ARP называется обратным запросом (reverse ARP — RARP) и служит для определения узлом собственного IP-адреса. Такие запросы предназначены для бездисковых рабочих станций и других устройств, которые получают конфигурационную информацию от
6.2.6. Обратные диапазоны
6.2.6. Обратные диапазоны Имеет ли смысл говорить об обратном диапазоне? И да, и нет. Следующий диапазон допустим:r = 6..3x = r.begin # 6y = r.end # 3flag = r.end_excluded? # falseКак видите, мы можем определить обе границы и узнать, что правая граница включена. Но этим перечень возможных операций
Итераторы.
Итераторы. В Шагах 15 и 16 мы повозились с имитацией массива (коллекцией). Мы добились нормальной работы при чтении и записи в ячейки массива. Но работа с массивом этим не ограничивается. Вот захочется нам сделать что-то со всеми элементами массива, а он индексирован по
Итераторы
Итераторы На первый взгляд итераторы представляются предметом весьма простым. Но стоит присмотреться повнимательнее, и вы заметите, что стандартные контейнеры STL поддерживают четыре разных типа итераторов: iterator, const_iterator, reverse_iterator и const_reverse_iterator. Проходит совсем немного
2.2.5.2 Итераторы
2.2.5.2 Итераторы Итератор - это программный объект, который осуществляет итеративную (циклическую) обработку некоторого множества данных. Итераторы различаются типом производимой обработки, но имеют единообразный внешний интерфейс. Каждый итератор открывает один (или
Итераторы
Итераторы Итераторы - это обобщение указателей, которые позволяют программисту работать с различными структурами данных (контейнерами) единообразным способом. Чтобы создать шаблонные алгоритмы, которые правильно и эффективно работают с различными типами структур
ИТЕРАТОРЫ ПОТОКОВ
ИТЕРАТОРЫ ПОТОКОВ Чтобы шаблоны алгоритмов могли работать непосредственно с потоками ввода-вывода, предусмотрены соответствующие шаблонные классы, подобные итераторам. Например,partial_sum_copy(istream_iterator‹double›(cin), istream_iterator‹double›(), ostream_iterator‹double›(cout, " "));читает файл,
Обратные итераторы (Reverse iterators)
Обратные итераторы (Reverse iterators) Двунаправленные итераторы и итераторы произвольного доступа имеют соответствующие адаптеры обратных итераторов, которые выполняют итерации через структуру данных в противоположном направлении.Они имеют те же самые сигнатуры, как и
Итераторы вставки (Insert iterators)
Итераторы вставки (Insert iterators) Чтобы было возможно иметь дело с вставкой таким же образом, как с записью в массив, в библиотеке обеспечивается специальный вид адаптеров итераторов, называемых итераторами вставки (insert iterators). С обычными классами итераторовwhile (first!= last) *result++ =
12.4.1. Итераторы вставки
12.4.1. Итераторы вставки Вот еще один фрагмент программы, в котором есть тонкая, но серьезная ошибка.int ia[] = { 0, 1, 1, 2, 3, 5, 5, 8 };vector int ivec( ia, ia+8 ), vres;// ...// поведение программы во время выполнения не определеноВидите ли вы, в чем она заключается?unique_copy( ivec.begin(), ivec.end(), vres.begin() );Проблема
12.4.3. Потоковые итераторы
12.4.3. Потоковые итераторы Стандартная библиотека предоставляет средства для работы потоковых итераторов чтения и записи совместно со стандартными контейнерами и обобщенными алгоритмами. Класс istream_iterator поддерживает итераторные операции с классом istream или одним из
15.4. Обратные кавычки
15.4. Обратные кавычки Обратные кавычки позволяют присваивать переменным данные вывода системных команд. Символы, заключенные в обратные кавычки, воспринимаются интерпретатором shell как системная команда, которую следует выполнить. С помощью этого метода можно
У15.4 Итераторы фигур
У15.4 Итераторы фигур При обсуждении COMPOSITE_FIGURE мы говорили о применении итераторов для выполнения операций над составными фигурами. Разработайте соответтсвующие классы итераторов. (Подсказка: в [M 1994a] приведены классы библиотеки итераторов, которые послужат основой вашей