Читаем Программирование. Принципы и практика использования C++ Исправленное издание полностью

<p id="AutBody_Root648"><strong>Б.4.2. Типы членов</strong></p>

Контейнер определяет множество типов его членов.

<p id="AutBody_Root649"><strong>Б.4.3. Конструкторы, деструкторы и присваивания</strong></p>

Контейнеры имеют много разнообразных конструкторов и операторов присваивания. Перечислим конструкторы, деструкторы и операторы присваивания для контейнера C (например, типа vector или map).

Для некоторых контейнеров и типов элементов конструктор или операция копирования может генерировать исключения.

<p id="AutBody_Root650"><strong>Б.4.4. Итераторы</strong></p>

Контейнер можно интерпретировать как последовательность, порядок следования элементов в которой определен либо итератором контейнера, либо является обратным к нему. Для ассоциативного контейнера порядок определяется критерием сравнения (по умолчанию оператором <).

<p id="AutBody_Root651"><strong>Б.4.5. Доступ к элементам</strong></p>

К некоторым элементам можно обратиться непосредственно.

Некоторые реализации — особенно их тестовые версии — всегда выполняют проверку диапазонов, но рассчитывать на корректность или наличие такой проверки на разных компьютерах нельзя. Если этот вопрос важен, просмотрите документацию.

<p id="AutBody_Root652"><strong>Б.4.6. Операции над стеком и двусторонней очередью</strong></p>

Стандартные контейнеры vector и deque обеспечивают эффективные операции над концами (back) последовательности элементов. Кроме того, контейнеры list и deque обеспечивают аналогичные операции над началом (front) своей последовательности.

Обратите внимание на то, что функции push_front() и push_back() копируют элемент в контейнер. Это значит, что размер контейнера увеличивается (на единицу). Если копирующий конструктор элемента может генерировать исключения, то вставка может завершиться отказом.

Отметим, что операции удаления элементов не возвращают значений. Если бы они это делали, то копирующие конструкторы, генерирующие исключения, могли бы серьезно усложнить реализацию. Для доступа к элементам стека и очереди рекомендуем использовать функции front() и back() (см. раздел Б.4.5). Мы не ставили себе задачу перечислить все ограничения; попробуйте догадаться об остальных (как правило, компиляторы сообщают пользователям об их неверных догадках) или обратитесь к более подробной документации.

<p id="AutBody_Root653"><strong>Б.4.7. Операции над списком</strong></p>

Ниже приведены операции над списком.

Результат q функции insert() ссылается на последний вставленный элемент. Результат q функции erase() ссылается на элемент, следующий за последним удаленным элементом. 

<p id="AutBody_Root654"><strong>Б.4.8. Размер и емкость</strong></p>

Размер — это количество элементов в контейнере; емкость — это количество элементов, которое контейнер может содержать до того, как потребуется дополнительно увеличить память

Изменяя размер или емкость, можно переместить элементы в новое место. Из этого следует, что итераторы (а также указатели и ссылки) на элементы могут стать некорректными (т.е. относиться к старым адресам).

<p id="AutBody_Root655"><strong>Б.4.9. Другие операции</strong></p>

Контейнеры можно копировать (см. раздел Б.4.3), сравнивать и обменивать.

Если сравнение контейнеров производится с помощью соответствующего оператора (например, <), то их элементы сравниваются с помощью эквивалентного оператора для сравнения элементов (например, <). 

<p id="AutBody_Root656"><strong>Б.4.10. Операции над ассоциативными контейнерами</strong></p>

Ассоциативные контейнеры обеспечивают поиск на основе ключей.

Упорядоченные ассоциативные контейнеры (map, set и др.) имеют необязательный шаблонный аргумент, указывающий тип предиката сравнения, например, set использует предикат C для сравнения значений типа K.

Первый итератор пары, возвращенной функцией equal_range, равен lower_bound, а второй — upper_bound. Вы можете вывести на печать значения всех элементов, имеющих ключ "Marian" в контейнере multimap, написав следующий код:

string k = "Marian";

typedef multimap::iterator MI;

pair pp = m.equal_range(k);

if (pp.first!=pp.second)

  cout << "elements with value ' " << k << " ':\n";

else

  cout << "no element with value ' " << k << " '\n";

for (MI p = pp.first; p!=pp.second; ++p) cout << p–>second << '\n';

В качестве альтернативы можно выполнить следующую эквивалентную инструкцию:

pair pp = make_pair(m.lower_bound(k),m.upper_bound(k));

Однако эта инструкция выполняется вдвое дольше. Алгоритмы equal_range, lower_bound и upper_bound можно выполнять также для упорядоченных последовательностей (раздел Б.5.4). Определение класса pair приведено в разделе Б.6.3. 

<p id="AutBody_Root657"><strong>Б.5. Алгоритмы</strong></p>
Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных