Функция back_inserter
Функция back_inserter создает специальный итератор
вставки, который при присваивании ему значения добавляет
это значение в конец контейнера. В параметр мы передаем
контейнер, в который будут вставляться элементы. Такой
итератор удобно использовать с алгоритмами стандартной
библиотеки, например copy или transform,
когда заранее неизвестно итоговое количество элементов.
Функция объявлена в заголовочном файле <iterator>
и возвращает объект типа std::back_insert_iterator.
Контейнер должен поддерживать метод push_back,
например std::vector, std::deque или
std::list.
Синтаксис
std::back_inserter(container)
Пример
Давайте скопируем элементы одного вектора в конец другого
с помощью функции back_inserter:
#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>
using namespace std;
int main()
{
vector<int> src = {1, 2, 3};
vector<int> dst = {4, 5};
copy(src.begin(), src.end(), back_inserter(dst));
for (int el : dst) {
cout << el << " ";
}
cout << endl;
return 0;
}
Результат выполнения кода:
4 5 1 2 3
Пример
Давайте с помощью функции back_inserter добавим
в вектор строки из другого вектора, преобразовав каждую
из них в верхний регистр:
#include <iostream>
#include <vector>
#include <string>
#include <iterator>
#include <algorithm>
#include <cctype>
using namespace std;
int main()
{
vector<string> src = {"a", "b", "c"};
vector<string> dst = {"d", "e"};
transform(src.begin(), src.end(), back_inserter(dst),
[](string s) {
for (char &ch : s) {
ch = toupper(ch);
}
return s;
});
for (const string &el : dst) {
cout << el << " ";
}
cout << endl;
return 0;
}
Результат выполнения кода:
"d e A B C"
Пример
Давайте напрямую запишем значения через итератор,
полученный функцией back_inserter:
#include <iostream>
#include <vector>
#include <iterator>
using namespace std;
int main()
{
vector<int> res;
auto it = back_inserter(res);
*it = 1;
*it = 2;
*it = 3;
for (int el : res) {
cout << el << " ";
}
cout << endl;
return 0;
}
Результат выполнения кода:
1 2 3
Смотрите также
-
функция
inserter,
которая создает итератор вставки в указанную позицию -
функция
front_inserter,
которая создает итератор вставки в начало контейнера -
функция
begin,
которая возвращает итератор на начало контейнера -
функция
end,
которая возвращает итератор на конец контейнера