Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Описывает адаптер итератора, удовлетворяющий требованиям итератора вывода. Он вставляет элементы, а не перезаписывает их в последовательность. Таким образом он предоставляет семантику, которая отличается от семантики перезаписи, предоставляемой итераторами последовательности C++ и ассоциативными контейнерами. Класс insert_iterator шаблонизируется в адаптируемом типе контейнера.
Синтаксис
template <class Container>
class insert_iterator;
Параметры
Контейнер
Тип контейнера, в который итератор insert_iterator вставит элементы.
Замечания
Контейнер типа Container должен соответствовать требованиям для контейнера с переменным размером и иметь функцию-член с двумя аргументами, в которой параметры имеют тип Container::iterator и Container::value_type которые возвращают тип Container::iterator. Последовательности из стандартной библиотеки С++ и упорядоченные ассоциативные контейнеры удовлетворяют данным требованиям и могут быть адаптированы к использованию в сочетании с insert_iterators. Для ассоциативных контейнеров аргумент позиции обрабатывается как подсказка, которая потенциально может увеличить или снизить производительность в зависимости от эффективности подсказки. Итератор insert_iterator всегда необходимо инициализировать с его контейнером.
Конструкторы
| Конструктор | Description |
|---|---|
| insert_iterator | Создает итератор insert_iterator, добавляющий элемент в указанную позицию в контейнере. |
Определения типов
| Введите имя | Description |
|---|---|
| container_type | Тип, представляющий контейнер, в который будет осуществляться вставка общего типа. |
| reference | Тип, который предоставляет ссылку на элемент последовательности под управлением связанного контейнера. |
Операторы
| Operator | Description |
|---|---|
| operator* | Оператор разыменования используется для реализации выражения итератора вывода * i = x для вставки общего типа. |
| оператор++ | Увеличивает insert_iterator до следующего местоположения, в котором можно сохранить значение. |
| operator= | Оператор присваивания, используемый для реализации выражения итератора вывода * i = x для вставки общего типа. |
Требования
Заголовок: <итератор>
Пространство имен: std
insert_iterator::container_type
Тип, представляющий контейнер, в который будет осуществляться вставка общего типа.
typedef Container container_type;
Замечания
Этот тип является синонимом для параметра-шаблона Container.
Пример
// insert_iterator_container_type.cpp
// compile with: /EHsc
#include <iterator>
#include <list>
#include <iostream>
int main( )
{
using namespace std;
list<int> L1;
insert_iterator<list<int> >::container_type L2 = L1;
inserter ( L2, L2.end ( ) ) = 20;
inserter ( L2, L2.end ( ) ) = 10;
inserter ( L2, L2.begin ( ) ) = 40;
list <int>::iterator vIter;
cout << "The list L2 is: ( ";
for ( vIter = L2.begin ( ) ; vIter != L2.end ( ); vIter++ )
cout << *vIter << " ";
cout << ")." << endl;
}
/* Output:
The list L2 is: ( 40 20 10 ).
*/
insert_iterator::insert_iterator
Создает итератор insert_iterator, добавляющий элемент в указанную позицию в контейнере.
insert_iterator(Container& _Cont, typename Container::iterator _It);
Параметры
_Продолжение
Контейнер, в который insert_iterator вставляет элементы.
_Оно
Позиция для вставки.
Замечания
Все контейнеры имеют функцию-член вставки, которая вызывается insert_iterator. Для ассоциативных контейнеров параметр позиции — это просто предложение. Функция вставки предоставляет удобный способ вставки значений.
Пример
// insert_iterator_insert_iterator.cpp
// compile with: /EHsc
#include <iterator>
#include <list>
#include <iostream>
int main( )
{
using namespace std;
int i;
list <int>::iterator L_Iter;
list<int> L;
for (i = 1 ; i < 4 ; ++i )
{
L.push_back ( 10 * i );
}
cout << "The list L is:\n ( ";
for ( L_Iter = L.begin( ) ; L_Iter != L.end( ); L_Iter++)
cout << *L_Iter << " ";
cout << ")." << endl;
// Using the member function to insert an element
inserter ( L, L.begin ( ) ) = 2;
// Alternatively, you may use the template version
insert_iterator< list < int> > Iter(L, L.end ( ) );
*Iter = 300;
cout << "After the insertions, the list L is:\n ( ";
for ( L_Iter = L.begin( ) ; L_Iter != L.end( ); L_Iter++ )
cout << *L_Iter << " ";
cout << ")." << endl;
}
/* Output:
The list L is:
( 10 20 30 ).
After the insertions, the list L is:
( 2 10 20 30 300 ).
*/
insert_iterator::operator*
Разыменовывает итератор вставки и возвращает адреса элемента.
insert_iterator<Container>& operator*();
Возвращаемое значение
Функция-член возвращает значение адресованного элемента.
Замечания
Используется для реализации выражения итератора выходных данных *Iter. = Если Iter это итератор, который обращается к элементу в последовательности, то *Iter = заменяет этот элемент значением и не изменяет общее количество элементов в последовательности.
Пример
// insert_iterator_op_deref.cpp
// compile with: /EHsc
#include <iterator>
#include <list>
#include <iostream>
int main( )
{
using namespace std;
int i;
list <int>::iterator L_Iter;
list<int> L;
for (i = 0 ; i < 4 ; ++i )
{
L.push_back ( 2 * i );
}
cout << "The original list L is:\n ( ";
for ( L_Iter = L.begin( ) ; L_Iter != L.end( ); L_Iter++ )
cout << *L_Iter << " ";
cout << ")." << endl;
insert_iterator< list < int> > Iter(L, L.begin ( ) );
*Iter = 10;
*Iter = 20;
*Iter = 30;
cout << "After the insertions, the list L is:\n ( ";
for ( L_Iter = L.begin( ) ; L_Iter != L.end( ); L_Iter++ )
cout << *L_Iter << " ";
cout << ")." << endl;
}
/* Output:
The original list L is:
( 0 2 4 6 ).
After the insertions, the list L is:
( 10 20 30 0 2 4 6 ).
*/
insert_iterator::operator++
Увеличивает insert_iterator до следующего местоположения, в котором можно сохранить значение.
insert_iterator<Container>& operator++();
insert_iterator<Container> operator++(int);
Параметры
insert_iterator, адресующий следующее местоположение, в котором можно сохранить значение.
Замечания
Операторы preincrementation и postincrementation возвращают одинаковый результат.
Пример
// insert_iterator_op_incr.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <iostream>
int main( )
{
using namespace std;
int i;
vector<int> vec;
for (i = 1 ; i < 5 ; ++i )
{
vec.push_back ( i );
}
vector <int>::iterator vIter;
cout << "The vector vec is:\n ( ";
for ( vIter = vec.begin ( ) ; vIter != vec.end ( ); vIter++ )
cout << *vIter << " ";
cout << ")." << endl;
insert_iterator<vector<int> > ii ( vec, vec.begin ( ) );
*ii = 30;
ii++;
*ii = 40;
ii++;
*ii = 50;
cout << "After the insertions, the vector vec becomes:\n ( ";
for ( vIter = vec.begin ( ) ; vIter != vec.end ( ); vIter++ )
cout << *vIter << " ";
cout << ")." << endl;
}
/* Output:
The vector vec is:
( 1 2 3 4 ).
After the insertions, the vector vec becomes:
( 30 40 50 1 2 3 4 ).
*/
insert_iterator::operator=
Вставляет значение в контейнер и возвращает итератор, который обновлен и указывает на новый элемент.
insert_iterator<Container>& operator=(
typename Container::const_reference val);
insert_iterator<Container>& operator=(
typename Container::value_type&& val);
Параметры
Val
Значение, которое должно быть присвоено контейнеру.
Возвращаемое значение
Ссылка на элемент, вставленный в контейнер.
Замечания
Первый оператор-член вычисляет
Iter = container->insert(Iter, val);
++Iter;
затем возвращает *this.
Второй оператор-член вычисляет
Iter = container->insert(Iter, std::move(val));
++Iter;
затем возвращает *this.
Пример
// insert_iterator_op_assign.cpp
// compile with: /EHsc
#include <iterator>
#include <list>
#include <iostream>
int main( )
{
using namespace std;
int i;
list <int>::iterator L_Iter;
list<int> L;
for (i = 0 ; i < 4 ; ++i )
{
L.push_back ( 2 * i );
}
cout << "The original list L is:\n ( ";
for ( L_Iter = L.begin( ) ; L_Iter != L.end( ); L_Iter++ )
cout << *L_Iter << " ";
cout << ")." << endl;
insert_iterator< list < int> > Iter(L, L.begin ( ) );
*Iter = 10;
*Iter = 20;
*Iter = 30;
cout << "After the insertions, the list L is:\n ( ";
for ( L_Iter = L.begin( ) ; L_Iter != L.end( ); L_Iter++ )
cout << *L_Iter << " ";
cout << ")." << endl;
}
/* Output:
The original list L is:
( 0 2 4 6 ).
After the insertions, the list L is:
( 10 20 30 0 2 4 6 ).
*/
insert_iterator::reference
Тип, который предоставляет ссылку на элемент последовательности под управлением связанного контейнера.
typedef typename Container::reference reference;
Замечания
Тип, который описывает ссылку на элемент последовательности под управлением связанного контейнера.
Пример
// insert_iterator_container_reference.cpp
// compile with: /EHsc
#include <iterator>
#include <list>
#include <iostream>
int main( )
{
using namespace std;
list<int> L;
insert_iterator<list<int> > iivIter( L , L.begin ( ) );
*iivIter = 10;
*iivIter = 20;
*iivIter = 30;
list<int>::iterator LIter;
cout << "The list L is: ( ";
for ( LIter = L.begin ( ) ; LIter != L.end ( ); LIter++ )
cout << *LIter << " ";
cout << ")." << endl;
insert_iterator<list<int> >::reference
RefFirst = *(L.begin ( ));
cout << "The first element in the list L is: "
<< RefFirst << "." << endl;
}
/* Output:
The list L is: ( 10 20 30 ).
The first element in the list L is: 10.
*/
См. также
<iterator>
Потокобезопасность в стандартной библиотеке C++
Справочник по стандартной библиотеке C++