Читаем C++ для начинающих полностью

it = svec.begin(); it != 0; ++it )

// ...

Упражнение 6.10

Найдите ошибки в использовании итераторов:

int ia[7] = { 0, 1, 1, 2, 3, 5, 8 };

string sa[6] = {

"Fort Sumter", "Manassas", "Perryville", "Vicksburg",

"Meridian", "Chancellorsvine" };

(a) vectorstring svec( sa, sa[6] );

(b) listint ilist( ia+4, ia+6 );

(c) listint ilist2( ilist.begin(), ilist.begin()+2 );

(d) vectorint ivec( ia[0], ia+8 );

(e) liststring slist( sa+6, sa );

(f) vectorstring svec2( sa, sa+6 );

<p>6.6. Операции с последовательными контейнерами</p>

Функция-член push_back() позволяет добавить единственный элемент в конец контейнера. Но как вставить элемент в произвольную позицию? А целую последовательность элементов? Для этих случаев существуют более общие операции.

Например, для вставки элемента в начало контейнера можно использовать:

vector string svec;

list string slist;

string spouse( "Beth" );

slist.insert( slist.begin(), spouse );

svec.insert( svec.begin(), spouse );

Первый параметр функции-члена insert() (итератор, адресующий некоторый элемент контейнера) задает позицию, а второй – вставляемое перед этой позицией значение. В примере выше элемент добавляется в начало контейнера. А так можно реализовать вставку в произвольную позицию:

string son( "Danny" );

liststring::iterator iter;

iter = find( slist.begin(), slist.end(), son );

slist.insert( iter, spouse );

Здесь find() возвращает позицию элемента в контейнере, если элемент найден, либо итератор end(), если ничего не найдено. (Мы вернемся к функции find() в конце следующего раздела.) Как можно догадаться, push_back() эквивалентен следующей записи:

// эквивалентный вызов: slist.push_back( value );

slist.insert( slist.end(), value );

Вторая форма функции-члена insert() позволяет вставить указанное количество одинаковых элементов, начиная с определенной позиции. Например, если мы хотим добавить десять элементов Anna в начало вектора, то должны написать:

vectorstring svec;

string anna( "Anna" );

svec.insert( svec.begin(), 10, anna );

insert() имеет и третью форму, помогающую вставить в контейнер несколько элементов. Допустим, имеется следующий массив:

string sarray[4] = { "quasi", "simba", "frollo", "scar" };

Мы можем добавить все его элементы или только некоторый диапазон в наш вектор строк:

svec.insert( svec.begin(), sarray, sarray+4 );

svec.insert( svec.begin() + svec.size()/2,

sarray+2, sarray+4 );

Такой диапазон отмечается и с помощью пары итераторов

// вставляем элементы svec

// в середину svec_two

svec_two.insert( svec_two.begin() + svec_two.size()/2,

svec.begin(), svec.end() );

или любого контейнера, содержащего строки:

list string slist;

// ...

// вставляем элементы svec

// перед элементом, содержащим stringVal

list string ::iterator iter =

find( slist.begin(), slist.end(), stringVal );

slist.insert( iter, svec.begin(), svec.end() );

<p>6.6.1. Удаление</p>

В общем случае удаление осуществляется двумя формами функции-члена erase(). Первая форма удаляет единственный элемент, вторая – диапазон, отмеченный парой итераторов. Для последнего элемента можно воспользоваться функцией-членом pop_back().

При вызове erase() параметром является итератор, указывающий на нужный элемент. В следующем фрагменте кода мы воспользуемся обобщенным алгоритмом find() для нахождения элемента и, если он найден, передадим его адрес функции-члену erase().

string searchValue( "Quasimodo" );

list string ::iterator iter =

find( slist.begin(), slist.end(), searchValue );

if ( iter != slist.end() )

slist.erase( iter );

Перейти на страницу:

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

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

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

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

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

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

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

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