Навигация
Главная
Поиск
Форум
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
Реклама
Сейчас на сайте
Гостей: 6
На сайте нет зарегистрированных пользователей

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

Принадлежит ли точка пересечению двух окружностей на Turbo Pascal + Отче...
Моделирование работы перекрёстка по регулированию движения на GPSS + Поя...
Сравнение двух бинарных деревьев на Turbo Pascal + отчет

Доступ к элементам контейнера
Одной из важнейших характеристик контейнера является доступ к его элементам. Обычно различают прямой, последовательный и ассоциативный доступ. Прямой доступ к элементу — это доступ по номеру (или, еще говорят, по индексу) элемента. Именно таким образом мы обращаемся к элементам массива, например:
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 Комментариев · 5236 Прочтений · Для печати

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


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



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

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

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

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

Пароль



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

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

Случайные загрузки
Мод "проверочный ...
Время загрузки ...
Керниган Б.В., Ри...
CoolHints2k
Система баннеро...
C++ для начинающих
AboutSystem
Иллюстрированный ...
Ведение справочны...
Самоучитель C++
Handles
PHP5. Профессиона...
Мод "register.php...
BDEPack
Профессиональное ...
Отключение и вклю...
Конвертирование и...
MicroGPSS Studen ...
База игр
Xrumer 4 Platinum...

Топ загрузок
Приложение Клие... 100793
Delphi 7 Enterp... 98016
Converter AMR<-... 20298
GPSS World Stud... 17059
Borland C++Buil... 14238
Borland Delphi ... 10373
Turbo Pascal fo... 7390
Калькулятор [Ис... 6080
Visual Studio 2... 5228
Microsoft SQL S... 3674
Случайные статьи
Особенности игры н...
Указатели на функц...
Установка маршрути...
Внутренние докумен...
Основная структура...
Принципы и програм...
Специалист по опыт...
Распространение пр...
Именование объектов
Online игровые авт...
Кроме затрат, связ...
Приэтом проверяетс...
Будьте на виду сле...
Создание и конфигу...
Настройка плагина ...
Наследование
Выдача команд на у...
Гибкость, расширяе...
Онлайн-возможности...
4.1. Двоичный поис...
Чтение сообщения и...
Какие варианты про...
Экспериментальный ...
ФУНКЦИОНАЛЬНАЯ СТР...
Кольцевые пакетные...
Статистика



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


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