Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
}
Алгоритм copy при таком использовании, как в этом примере, работает в режиме замещения. Это означает, что 1 -й элемент контейнера-источника замещает 1 -й элемент контейнера-приемника.
Однако этот же алгоритм может работать и в режиме вставки, если в качестве третьего аргумента использовать так называемый итератор вставки.
Итераторы вставки front_inserter(), back_inserter(), inserter() предназначены для добавления новых элементов в начало, конец или произвольное место контейнера.
Покажем использование этих итераторов на следующем примере.
int main() {
int а[4] = {40, 30, 20, 10};
vector<int> va(a, a + 4);
int b[3] = {80, 90, 100};
vector<int> vb(b, b + 3);
int c[3] = {50, 60, 70};
vector<int> vc(c, с + 3);
list<int> L; // пустой список
Copy(va.begin(), va.end(), front_inserter(L));
Print(L);
Copy(vb.begin(), vb.end(), back_inserter(L));
Print(L);
list<int>::iterator from = L.begin();
Advance(from, 4);
Copy(vc.begin(), vc.end(), inserter(L, from));
Print(L);
Return 0;
}
Результат выполнения программы:
10 20 30 40
10 20 30 40 80 90 100
10 20 30 40 50 60 70 80 90 100
Обратите внимание на следующие моменты:
• Первый вызов функции сору осуществляет копирование (вставку) вектора va в список L, причем итератор вставки front_inserter обеспечивает размещение очередного элемента вектора va в начале списка — поэтому порядок элементов в списке изменяется на обратный.
• Второй вызов сору пересылает элементы вектора vb в конец списка L благодаря итератору вставки back_inserter, поэтому порядок копируемых элементов не меняется.
• Третий вызов сору копирует вектор vc в заданное итератором from место списка L, а именно после четвертого элемента списка. Чтобы определить нужное значение итератора from, мы предварительно устанавливаем его в начало списка, а затем обеспечиваем приращение на 4 — вызовом функции advance().
Дата публикования: 2014-11-28; Прочитано: 209 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!