Навигация
Главная
Поиск
Форум
FAQ's
Ссылки
Карта сайта
Чат программистов

Статьи
-Delphi
-C/C++
-Turbo Pascal
-Assembler
-Java/JS
-PHP
-Perl
-DHTML
-Prolog
-GPSS
-Сайтостроительство
-CMS: PHP Fusion
-Инвестирование

Файлы
-Для программистов
-Компонеты для Delphi
-Исходники на Delphi
-Исходники на C/C++
-Книги по Delphi
-Книги по С/С++
-Книги по JAVA/JS
-Книги по Basic/VB/.NET
-Книги по PHP/MySQL
-Книги по Assembler
-PHP Fusion MOD'ы
-by Kest
Professional Download System
Реклама
Услуги

Автоматическое добавление статей на сайты на Wordpress, Joomla, DLE
Заказать продвижение сайта
Программа для рисования блок-схем
Инженерный калькулятор онлайн
Таблица сложения онлайн
Популярные статьи
OpenGL и Delphi... 65535
Форум на вашем ... 65535
21 ошибка прогр... 65535
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Пример работы с... 65535
Содержание сайт... 65535
ТЕХНОЛОГИИ ДОСТ... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Создание отчето... 65535
Имитационное мо... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Реклама
Сейчас на сайте
Гостей: 9
На сайте нет зарегистрированных пользователей

Пользователей: 13,364
новичок: eqvufy
Новости
Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ
Delphi, Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
Заказать программу для Windows Mobile, Symbian

Информационная система - продуктовый магазин на Turbo Pascal (База данны...
Моделирование вычислительного центра на GPSS + Отчет + Блок схема
Медиа плейер на Delphi + Пояснительная записка

Доступ к элементам контейнера
Одной из важнейших характеристик контейнера является доступ к его элементам. Обычно различают прямой, последовательный и ассоциативный доступ. Прямой доступ к элементу — это доступ по номеру (или, еще говорят, по индексу) элемента. Именно таким образом мы обращаемся к элементам массива, например:
v[7]



Это выражение означает, что мы хотим оперировать элементом контейнера v, имеющим номер (индекс) 7. Нумерация элементов может начинаться, вообще говоря, с любого числа, однако в С++ принято нумерацию начинать с нуля, так как для встроенных массивов (которые являются частным случаем контейнера) принята именно такая нумерация.
Последовательный доступ отличается тем, что мы не имеем в распоряжении индексов элементов, зато можем перемещаться последовательно от элемента к элементу. Можно считать, что существует невидимая «стрелка»-индикатор, которую перемещают по элементам контейнера с помощью некоторого множества операций. Тот элемент, на который в данный момент «стрелка» показывает, называется текущим.
Обычно набор операций для последовательного доступа включает операции:
? перехода к первому элементу;
? перехода к последнему элементу;
? перехода к следующему элементу;
? перехода к предыдущему элементу;
? перехода на п элементов вперед (от первого в сторону последнего элемента контейнера);
? перехода на п элементов назад (от конца к началу контейнера);
? получения (изменения) значения текущего элемента.
Эти операции могут быть представлены в функциональной форме, например:
next(v); // перейти к следующему
prev(v); // перейти к предыдущему
first(v); // перейти к первому
last(v); // перейти к последнему
current(v); // получить текущий
forward(v, п); // перейти на п элементов вперед
back(v, п); // перейти на п элементов назад
Операция изменения текущего элемента — это, естественно, операция присваивания, например:
current(v) = value;



В этом случае функция current() должна возвращать ссылку на элемент контейнера.
Те же операции, реализованные как методы класса (контейнера), можно представить следующим образом:
v.nextO; // перейти к следующему
v.prevQ; // перейти к предыдущему
v.firstO; // перейти к первому
v.last(); // перейти к последнему
v.currentO; // получить текущий
v.skip(n); // перейти на п элементов вперед
v.skip(-n); // перейти на п элементов назад



Однако в С++ «стрелку»-индикатор удобнее представить в виде некоторого объекта, связанного с контейнером. Если этот объект имеет имя i v, то те же операции могут быть реализованы и так:
iv = v.beginO; // перейти к первому
iv = v.last(); // перейти к последнему
++iv; // перейти к следующему
--iv; // перейти к предыдущему
iv+=n; // перейти на п элементов вперед
iv-=n; // перейти на п элементов назад
*iv // получить значение текущего элемента



1 Обычным указателем такой объект будет только для контейнера-массива.
Не правда ли, очень похоже на указатель?! Однако это не указатель1 — в практике объектно-ориентированного программирования такой объект называется итератором. Итератор — это объект, обеспечивающий последовательный доступ к элементам контейнера. Так же как контейнер представляет собой более общую концепцию, чем массив, так и итератор является более общей концепцией, чем указатель. В [17] итератор описан как один из шаблонов (паттернов) программирования — Iterator.
Ассоциативный доступ похож на прямой, однако основан не на номерах элементов, а на содержимом элементов контейнера. Например, в банковской системе контейнер может содержать записи о счетах клиентов. Обязательным элементом записи является поле, содержащее фамилию клиента, например:
class TAccount
{ string Family: // фамилия
unsigned long Count: // номер счета
Date Open: // дата открытия счета
public: // . . . }:



Если контейнер v содержит такие объекты, то выражение представляет собой счет, открытый на имя Стенли Липпмана:
v["Lippman"]



Такое выражение в С++ является вполне корректным, так как операция индексирования может быть перегружена для аргумента любого типа.
Поле, с содержимым которого ассоциируется элемент контейнера, называется ключом (полем доступа). Элемент контейнера, соответствующий некоторому значению ключа, обычно так и называется значением. Ассоциативный контейнер, таким образом, состоит из множества пар «ключ-значение». Как правило, ассоциативный контейнер упорядочен некоторым образом по ключу. В данном случае контейнер, содержащий счета клиентов, отсортирован по полю Family, поэтому элементом, предшествующим записи с фамилией Lippman, может быть запись с фамилией Kupaev, а следующим — запись с фамилией Martin.
Методы доступа к контейнеру — настолько важная характеристика, что в стандартной библиотеке (см. п. 17 в [1]) различают контейнеры последовательные и ассоциативные. Последовательными контейнерами, которые обеспечивают и прямой, и последовательный варианты доступа, являются контейнеры vector и deque, а ассоциативным — контейнер тар. Контейнер, в котором доступ только последовательный, — это list.
Опубликовал Kest November 03 2013 16:38:47 · 0 Комментариев · 4900 Прочтений · Для печати

• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •


Комментарии
Нет комментариев.
Добавить комментарий
Имя:



smiley smiley smiley smiley smiley smiley smiley smiley smiley
Запретить смайлики в комментариях

Введите проверочный код:* =
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Поделиться ссылкой
Фолловь меня в Твиттере! • Смотрите канал о путешествияхКак приготовить мидии в тайланде?
Загрузки
Новые загрузки
iChat v.7.0 Final...
iComm v.6.1 - выв...
Visual Studio 200...
CodeGear RAD Stud...
Шаблон для новост...

Случайные загрузки
Delphi. Разработк...
Архив программ
Программа рисует ...
Microsoft SQL Ser...
Клавиатурный трен...
MpegPlay
Задача о 8ми ладьях
Mass Photo Upload
Page Promoter 7.7...
INSTANT BOOSTER v...
Экранная лупа
Простой текстовый...
Иллюстрированный ...
CwstatusBar
Blib [Исходник на...
Autorunner
Delphi Russian Kn...
PCX
Text effect
Импорт новостей ...

Топ загрузок
Приложение Клие... 100774
Delphi 7 Enterp... 97832
Converter AMR<-... 20268
GPSS World Stud... 17014
Borland C++Buil... 14191
Borland Delphi ... 10290
Turbo Pascal fo... 7373
Калькулятор [Ис... 5984
Visual Studio 2... 5207
Microsoft SQL S... 3661
Случайные статьи
СТРУКТУРНОЕ ПРОГРА...
Тестирование модул...
Моделирование непр...
он будет отвечать ...
Используя функции ...
Спил деревьев
Хотя компьютеры, в...
цифровую подпись с...
Изменение последов...
Разработка собстве...
Disk write error
Консультант
Регистрация недвиж...
ESP защищает целос...
Функция GetSystemI...
Бюджетные цветные ...
Шаринг телекарта hd
Too many variables
Windows 2000, долж...
Лучшая букмекерска...
Элемент ввода text...
"Недокументированн...
Определение кодово...
Visual Studio. Ком...
Линейная задача
Статистика



Друзья сайта
Программы, игры


Полезно
В какую объединенную сеть входит классовая сеть? Суммирование маршрутов Занимают ли таблицы память маршрутизатора?