Функция inserter
Функция inserter создает специальный итератор вставки для контейнера. Этот итератор позволяет алгоритмам STL, таким как copy или transform, добавлять элементы в контейнер, а не перезаписывать существующие. В первый параметр мы передаем контейнер, в который будут вставляться элементы, а во второй - итератор, указывающий позицию, с которой начнется вставка. Функция возвращает объект insert_iterator, который при присваивании значения вставляет элемент в указанную позицию и сдвигает итератор вперед.
Синтаксис
std::inserter(container, iter)
Пример
Давайте скопируем элементы из одного вектора в другой, используя inserter для вставки в начало:
#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>
using namespace std;
int main()
{
vector<int> src = {1, 2, 3};
vector<int> dest = {4, 5};
copy(src.begin(), src.end(), inserter(dest, dest.begin()));
for (int n : dest) {
cout << n << " ";
}
cout << endl;
return 0;
}
Результат выполнения кода:
1 2 3 4 5
Пример
Давайте вставим элементы в середину вектора, используя inserter с итератором, указывающим на третий элемент:
#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>
using namespace std;
int main()
{
vector<int> src = {1, 2, 3};
vector<int> dest = {4, 5, 6, 7};
copy(src.begin(), src.end(), inserter(dest, dest.begin() + 2));
for (int n : dest) {
cout << n << " ";
}
cout << endl;
return 0;
}
Результат выполнения кода:
4 5 1 2 3 6 7
Пример
Давайте используем inserter для добавления строк в конец вектора строк:
#include <iostream>
#include <vector>
#include <string>
#include <iterator>
#include <algorithm>
using namespace std;
int main()
{
vector<string> src = {"a", "b", "c"};
vector<string> dest = {"d", "e"};
copy(src.begin(), src.end(), inserter(dest, dest.end()));
for (const string& s : dest) {
cout << s << " ";
}
cout << endl;
return 0;
}
Результат выполнения кода:
"d e a b c"
Смотрите также
-
функция
back_inserter,
которая вставляет элементы в конец контейнера -
функция
front_inserter,
которая вставляет элементы в начало контейнера -
функция
begin,
которая возвращает итератор на начало контейнера -
функция
end,
которая возвращает итератор на конец контейнера