функция метод copy в C++

Функция copy в C++: легко и понятно!

Всем привет! Часто приходиться вывести некоторое количество элементов или добавить ячейки из одного контейнера в другой. Часто для это используется цикл for, но есть средство лучше — метод copy().

Как это работает Что такое функция copy

copy — это метод который имеет четыре области применения.

  • Первая — это выводить элементы от n-го итератора до j.
  • Вторая — это добавлять элементы из контейнера A в контейнер B.
  • Третья — это копирование диапазона ячеек и вставка его позицию X.

Эту функция поддерживают контейнеры: vector list set map

Как это сделать Как создать метод copy

  1. первый и последний — это диапазон ячеек к которым будут выполнятся операции.
  2. В операции входит:

вывод Вывод элементов

ostream_iterator — это итератор вывода. Он применяется для вывода элементов.
Для оперирования этим итератором нужно подключить библиотеку — iterator.  Не поддерживает контейнер — map.

После ostream_iterator должен стоять <тип данных> выводимых элементов. Например — <int>.

Разработчики сделали возможность выводить между элементами какую-то информацию — (cout, "ваш текст"). В ваш текст мы можем писать все что угодно, однако обычно там ставят пробел — " ".

Вот так например мы смогли вывести весь список:

Вот какой будет результат выполнения этой программы:

fuctsiya_at.cpp
Привет мир!
Process returned 0 (0x0) execution time : 0.010 s
Press any key to continue.

 Добавление элементов

inserter — специальный тип итератора вывода который добавляет элементы из контейнера A в контейнер B.

После него не нужно указывать тип данных. Только понадобится в скобках написать, в какой контейнер и в какое его место будет идти добавление элементов.

back_inserter — добавляет значения в конец STL контейнера.Не работает если третий аргумент указывает на map. Но работает c вектором пар (vector < pair <string, int> >).

front_inserter — добавляет элементы в начала контейнера.Не работает с map vector.

front_inserter_copy.cpp
30 20 10
Process returned 0 (0x0) execution time : 0.010 s
Press any key to continue.

удаление переменной C++ Копирование элементов

Для вставки копируемых элементов в контейнер нужно третьим аргументом  передавать — итератор.  От него начнут изменяться ячейки на значения другого контейнера. Не работает для set map.

Мы вставляем ячейки от начала контейнера — ivec.

В примере ниже мы изменим только вторую ячейку вектора answer, хотя у вектора v три ячейки.

Результат программы после запуска:

changes_copy.cpp
вектор answer до использования copy: 0 10
вектор answer после оперирования методом copy: 0 1
Process returned 0 (0x0) execution time : 0.010 s
Press any key to continue.

На этом все! Надеемся эта информация была для вас полезна. Если вы что-то не поняли или заметили в статье опечатку можете написать в комментарии. Удачи!




Комментарии к записи “Функция copy в C++: легко и понятно!”

Добавить комментарий

Ваш адрес email не будет опубликован.

  • Валерий:

    Последняя программа у вас не рабочая, так как при компиляции будет ошибка «выход за пределы вектора».
    Это и понятно, так как первый вектор у вас имеет 3 элемента, а второй — только 2. Вставка этих 3-х элементов в второй происходит со 2-ой позиции, и естественно будет сгенерина ошибка.
    Вот мой код:
    int main()
    {

    std::vector_v1;
    std::vector_v2;

    _v1.push_back(1);
    _v1.push_back(2);
    _v1.push_back(3);

    _v2.push_back(4);
    _v2.push_back(5);
    _v2.push_back(6);
    _v2.push_back(7);

    std::copy(_v2.begin(), _v2.end(), std::ostream_iterator(std::cout, » «));
    std::cout << '\n';
    std::vector::iterator _iter = _v2.begin();
    _iter++;

    std::copy(_v1.begin(), _v1.end(), _iter);
    std::copy(_v2.begin(), _v2.end(), std::ostream_iterator(std::cout, » «));

    return 0;
    }

    • Дмитрий:

      Программа про которую вы говорите будет работать. Элементы будут копироваться пока не дойдет до конца одного из массивов. А программа не компилировалась, потому что после ostream_iterator не было типа данных — int. Спасибо, что заметили!

  • Антон из СПб:

    В примере кода с front_inserter самого front_inserter и нет! ))