Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Описывает адаптер итератора, удовлетворяющий требованиям итератора вывода. Он вставляет элементы, а не перезаписывает элементы в передней части последовательности. Таким образом, он предоставляет семантику, отличную от семантики перезаписи, предоставляемой итераторами контейнеров последовательности C++. Класс front_insert_iterator шаблонизируется в типе контейнера.
Синтаксис
template <class Container>
class front_insert_iterator;
Параметры
Контейнер
Тип контейнера, в переднюю часть которого итератор front_insert_iterator вставит элементы.
Замечания
Контейнер должен удовлетворять требованиям последовательности вставки в переднюю часть, если можно вставить элементы в начало последовательности в постоянном времени с поправкой на амортизацию. Контейнеры последовательности стандартной библиотеки C++, определенные классами deque и list, обеспечивают необходимую функцию-член push_front и удовлетворяют этим требованиям. В отличие от этого, контейнеры последовательностей, определенные классом векторов, не соответствуют этим требованиям и не могут быть адаптированы для использования с sfront_insert_iterator. Итератор front_insert_iterator всегда необходимо инициализировать с его контейнером.
Конструкторы
| Конструктор | Description |
|---|---|
| front_insert_iterator | Создает итератор, может вставлять элементы с передней стороны указанного объекта контейнера. |
Определения типов
| Введите имя | Description |
|---|---|
| container_type | Тип, представляющий контейнер, в переднюю часть которого будет осуществляться вставка. |
| reference | Тип, который предоставляет ссылку на элемент последовательности под управлением связанного контейнера. |
Операторы
| Operator | Description |
|---|---|
| operator* | Оператор удаления ссылки, используемый для применения выражения итератора вывода * i = x для вставки в переднюю часть. |
| оператор++ | Увеличивает front_insert_iterator до следующего местоположения, в котором можно сохранить значение. |
| operator= | Оператор присваивания, используемый для применения выражения итератора вывода * i = x для вставки в переднюю часть. |
Требования
Заголовок: <итератор>
Пространство имен: std
front_insert_iterator::container_type
Тип, представляющий контейнер, в переднюю часть которого будет осуществляться вставка.
typedef Container container_type;
Замечания
Этот тип является синонимом для параметра-шаблона Container.
Пример
// front_insert_iterator_container_type.cpp
// compile with: /EHsc
#include <iterator>
#include <list>
#include <iostream>
int main( )
{
using namespace std;
list<int> L1;
front_insert_iterator<list<int> >::container_type L2 = L1;
front_inserter ( L2 ) = 20;
front_inserter ( L2 ) = 10;
front_inserter ( L2 ) = 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 10 20 ).
*/
front_insert_iterator::front_insert_iterator
Создает итератор, может вставлять элементы с передней стороны указанного объекта контейнера.
explicit front_insert_iterator(Container& _Cont);
Параметры
_Продолжение
Объект контейнера, в который front_insert_iterator вставляет элементы.
Возвращаемое значение
front_insert_iterator для объекта контейнера параметра.
Пример
// front_insert_iterator_front_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 < 9 ; ++i )
{
L.push_back ( 2 * 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
front_inserter ( L ) = 20;
// Alternatively, one may use the template function
front_insert_iterator< list < int> > Iter(L);
*Iter = 30;
cout << "After the front 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:
( -2 0 2 4 6 8 10 12 14 16 ).
After the front insertions, the list L is:
( 30 20 -2 0 2 4 6 8 10 12 14 16 ).
*/
front_insert_iterator::operator*
Разыменовывает итератор вставки и возвращает адресованный элемент.
front_insert_iterator<Container>& operator*();
Возвращаемое значение
Функция-член возвращает значение адресованного элемента.
Замечания
Используется для реализации выражения итератора выходных данных *Iter. = Если Iter это итератор, который обращается к элементу в последовательности, то *Iter = заменяет этот элемент значением и не изменяет общее количество элементов в последовательности.
Пример
// front_insert_iterator_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 = -1 ; i < 9 ; ++i )
{
L.push_back ( 2 * i );
}
cout << "The list L is:\n ( ";
for ( L_Iter = L.begin( ) ; L_Iter != L.end( ); L_Iter++)
cout << *L_Iter << " ";
cout << ")." << endl;
front_insert_iterator< list < int> > Iter(L);
*Iter = 20;
// Alternatively, you may use
front_inserter ( L ) = 30;
cout << "After the front 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:
( -2 0 2 4 6 8 10 12 14 16 ).
After the front insertions, the list L is:
( 30 20 -2 0 2 4 6 8 10 12 14 16 ).
*/
front_insert_iterator::operator++
Увеличивает back_insert_iterator до следующего местоположения, в котором можно сохранить значение.
front_insert_iterator<Container>& operator++();
front_insert_iterator<Container> operator++(int);
Возвращаемое значение
front_insert_iterator, адресующий следующее местоположение, в котором можно сохранить значение.
Замечания
Операторы preincrementation и postincrementation возвращают одинаковый результат.
Пример
// front_insert_iterator_op_incre.cpp
// compile with: /EHsc
#include <iterator>
#include <list>
#include <iostream>
int main( )
{
using namespace std;
list<int> L1;
front_insert_iterator<list<int> > iter ( L1 );
*iter = 10;
iter++;
*iter = 20;
iter++;
*iter = 30;
iter++;
list <int>::iterator vIter;
cout << "The list L1 is: ( ";
for ( vIter = L1.begin ( ) ; vIter != L1.end ( ); vIter++ )
cout << *vIter << " ";
cout << ")." << endl;
}
/* Output:
The list L1 is: ( 30 20 10 ).
*/
front_insert_iterator::operator=
Добавляет (заносит) значение в переднюю часть контейнера.
front_insert_iterator<Container>& operator=(typename Container::const_reference val);
front_insert_iterator<Container>& operator=(typename Container::value_type&& val);
Параметры
Val
Значение, которое должно быть присвоено контейнеру.
Возвращаемое значение
Ссылка на последний элемент, вставленный в начале контейнера.
Замечания
Первый оператор-член вычисляет container.push_front( val), затем возвращает *this.
Второй оператор-член вычисляет
container->push_front((typename Container::value_type&&) val),
затем возвращает *this.
Пример
// front_insert_iterator_op_assign.cpp
// compile with: /EHsc
#include <iterator>
#include <list>
#include <iostream>
int main( )
{
using namespace std;
list<int> L1;
front_insert_iterator<list<int> > iter ( L1 );
*iter = 10;
iter++;
*iter = 20;
iter++;
*iter = 30;
iter++;
list <int>::iterator vIter;
cout << "The list L1 is: ( ";
for ( vIter = L1.begin ( ) ; vIter != L1.end ( ); vIter++ )
cout << *vIter << " ";
cout << ")." << endl;
}
/* Output:
The list L1 is: ( 30 20 10 ).
*/
front_insert_iterator::reference
Тип, который предоставляет ссылку на элемент последовательности под управлением связанного контейнера.
typedef typename Container::reference reference;
Пример
// front_insert_iterator_reference.cpp
// compile with: /EHsc
#include <iterator>
#include <list>
#include <iostream>
int main( )
{
using namespace std;
list<int> L;
front_insert_iterator<list<int> > fiivIter( L );
*fiivIter = 10;
*fiivIter = 20;
*fiivIter = 30;
list<int>::iterator LIter;
cout << "The list L is: ( ";
for ( LIter = L.begin ( ) ; LIter != L.end ( ); LIter++)
cout << *LIter << " ";
cout << ")." << endl;
front_insert_iterator<list<int> >::reference
RefFirst = *(L.begin ( ));
cout << "The first element in the list L is: "
<< RefFirst << "." << endl;
}
/* Output:
The list L is: ( 30 20 10 ).
The first element in the list L is: 30.
*/
См. также
<iterator>
Потокобезопасность в стандартной библиотеке C++
Справочник по стандартной библиотеке C++