Класс back_insert_iterator
Описывает адаптер итератора, удовлетворяющий требованиям итератора вывода. Вставляет, а не перезаписывает элементы в конечную часть последовательности, тем самым предоставляя семантику, отличную от семантики перезаписи, предоставляемой итераторами контейнеров последовательности C++. Класс back_insert_iterator
шаблонизируется в типе контейнера.
Синтаксис
template <class Container>
class back_insert_iterator;
Параметры
Контейнер
Тип контейнера, в конец которого итератор back_insert_iterator
вставит элементы.
Замечания
Контейнер должен удовлетворять требованиям последовательности вставки в конечную часть, если можно вставить элементы в конец последовательности в постоянном времени с поправкой на амортизацию. Контейнеры последовательности стандартной библиотеки C++, определенные классами deque, list и vector, предоставляют необходимую функцию-член push_back
и удовлетворяют данным требованиям. Эти три контейнера и строки могут быть адаптированы для использования с back_insert_iterator
s. Итератор back_insert_iterator
всегда необходимо инициализировать с его контейнером.
Конструкторы
Конструктор | Description |
---|---|
back_insert_iterator | Создает итератор back_insert_iterator , который добавляет элементы в местоположение за последним элементом в контейнере. |
Определения типов
Введите имя | Description |
---|---|
container_type | Тип, предоставляющий контейнер для итератора back_insert_iterator . |
reference | Тип, предоставляющий ссылку для итератора back_insert_iterator . |
Операторы
Operator | Description |
---|---|
operator* | Оператор удаления ссылки, используемый для реализации выражения итератора вывода * i = x для вставки в конечную часть. |
оператор++ | Увеличивает back_insert_iterator до следующего местоположения, в котором можно сохранить значение. |
operator= | Оператор присваивания, используемый для применения выражения итератора вывода * i = x для вставки в конечную часть. |
Требования
Заголовок: <итератор>
Пространство имен: std
back_insert_iterator::back_insert_iterator
Создает итератор back_insert_iterator
, который добавляет элементы в местоположение за последним элементом в контейнере.
explicit back_insert_iterator(Container& _Cont);
Параметры
_Продолжение
Контейнер, в который back_insert_iterator
вставляет элемент.
Возвращаемое значение
back_insert_iterator
для параметра Container.
Пример
// back_insert_iterator_back_insert_iterator.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <iostream>
int main( )
{
using namespace std;
int i;
vector<int> vec;
for ( i = 1 ; i < 4 ; ++i )
{
vec.push_back ( i );
}
vector <int>::iterator vIter;
cout << "The initial vector vec is: ( ";
for ( vIter = vec.begin ( ) ; vIter != vec.end ( ); vIter++)
cout << *vIter << " ";
cout << ")." << endl;
// Insertions with member function
back_inserter ( vec ) = 40;
back_inserter ( vec ) = 50;
// Alternatively, insertions can be done with template function
back_insert_iterator<vector<int> > backiter ( vec );
*backiter = 600;
backiter++;
*backiter = 700;
cout << "After the insertions, the vector vec is: ( ";
for ( vIter = vec.begin ( ) ; vIter != vec.end ( ); vIter++)
cout << *vIter << " ";
cout << ")." << endl;
}
The initial vector vec is: ( 1 2 3 ).
After the insertions, the vector vec is: ( 1 2 3 40 50 600 700 ).
back_insert_iterator::container_type
Тип, предоставляющий контейнер для итератора back_insert_iterator
.
typedef Container
container_type;
Замечания
Этот тип является синонимом для параметра-шаблона Container.
Пример
// back_insert_iterator_container_type.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <iostream>
int main( )
{
using namespace std;
int i;
vector<int> vec;
for (i = 1 ; i < 4 ; ++i )
{
vec.push_back ( i );
}
vector <int>::iterator vIter;
cout << "The original vector vec is: ( ";
for ( vIter = vec.begin ( ) ; vIter != vec.end ( ); vIter++)
cout << *vIter << " ";
cout << ")." << endl;
back_insert_iterator<vector<int> >::container_type vec1 = vec;
back_inserter ( vec1 ) = 40;
cout << "After the insertion, the vector is: ( ";
for ( vIter = vec1.begin ( ) ; vIter != vec1.end ( ); vIter++)
cout << *vIter << " ";
cout << ")." << endl;
}
The original vector vec is: ( 1 2 3 ).
After the insertion, the vector is: ( 1 2 3 40 ).
back_insert_iterator::operator*
Оператор dereferencing, используемый для реализации выражения итератора выходных данных * i = x.
back_insert_iterator<Container>& operator*();
Возвращаемое значение
Ссылка на элемент, вставленный в конец контейнера.
Замечания
Используется для реализации выражения итератора выходных данных *Iter. = Если Итератор является итератором, который обращается к элементу в последовательности, то *Iter = значение заменяет этот элемент значением и не изменяет общее количество элементов в последовательности.
Пример
// back_insert_iterator_back_insert.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <iostream>
int main( )
{
using namespace std;
int i;
vector<int> vec;
for (i = 1 ; i < 4 ; ++i )
{
vec.push_back ( i );
}
vector <int>::iterator vIter;
cout << "The vector vec is: ( ";
for ( vIter = vec.begin ( ) ; vIter != vec.end ( ); vIter++)
cout << *vIter << " ";
cout << ")." << endl;
back_insert_iterator<vector<int> > backiter ( vec );
*backiter = 10;
backiter++; // Increment to the next element
*backiter = 20;
backiter++;
cout << "After the insertions, the vector vec becomes: ( ";
for ( vIter = vec.begin ( ) ; vIter != vec.end ( ); vIter++)
cout << *vIter << " ";
cout << ")." << endl;
}
The vector vec is: ( 1 2 3 ).
After the insertions, the vector vec becomes: ( 1 2 3 10 20 ).
back_insert_iterator::operator++
Увеличивает back_insert_iterator
до следующего местоположения, в котором можно сохранить значение.
back_insert_iterator<Container>& operator++();
back_insert_iterator<Container> operator++(int);
Возвращаемое значение
back_insert_iterator
, адресующий следующее местоположение, в котором можно сохранить значение.
Замечания
Операторы preincrementation и postincrementation возвращают одинаковый результат.
Пример
// back_insert_iterator_op_incre.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <iostream>
int main( )
{
using namespace std;
int i;
vector<int> vec;
for (i = 1 ; i < 3 ; ++i )
{
vec.push_back ( 10 * i );
}
vector <int>::iterator vIter;
cout << "The vector vec is: ( ";
for ( vIter = vec.begin ( ) ; vIter != vec.end ( ); vIter++)
cout << *vIter << " ";
cout << ")." << endl;
back_insert_iterator<vector<int> > backiter ( vec );
*backiter = 30;
backiter++; // Increment to the next element
*backiter = 40;
backiter++;
cout << "After the insertions, the vector vec becomes: ( ";
for ( vIter = vec.begin ( ) ; vIter != vec.end ( ); vIter++)
cout << *vIter << " ";
cout << ")." << endl;
}
The vector vec is: ( 10 20 ).
After the insertions, the vector vec becomes: ( 10 20 30 40 ).
back_insert_iterator::operator=
Добавляет или вставляет значение в конец контейнера.
back_insert_iterator<Container>& operator=(typename Container::const_reference val);
back_insert_iterator<Container>& operator=(typename Container::value_type&& val);
Параметры
Val
Значение для вставки в контейнер.
Возвращаемое значение
Ссылка на последний элемент, вставленный в конец контейнера.
Замечания
Первый оператор-член вычисляет Container.push_back( val)
,
затем возвращает *this
. Второй оператор-член вычисляет
container->push_back((typename Container::value_type&&)val)
,
затем возвращает *this
.
Пример
// back_insert_iterator_op_assign.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <iostream>
int main( )
{
using namespace std;
int i;
vector<int> vec;
for (i = 1 ; i < 4 ; ++i )
{
vec.push_back ( i );
}
vector <int>::iterator vIter;
cout << "The vector vec is: ( ";
for ( vIter = vec.begin ( ) ; vIter != vec.end ( ); vIter++)
cout << *vIter << " ";
cout << ")." << endl;
back_insert_iterator<vector<int> > backiter ( vec );
*backiter = 10;
backiter++; // Increment to the next element
*backiter = 20;
backiter++;
cout << "After the insertions, the vector vec becomes: ( ";
for ( vIter = vec.begin ( ) ; vIter != vec.end ( ); vIter++)
cout << *vIter << " ";
cout << ")." << endl;
}
back_insert_iterator::reference
Тип, предоставляющий ссылку для итератора back_insert_iterator
.
typedef typename Container::reference reference;
Замечания
Тип, который описывает ссылку на элемент последовательности под управлением связанного контейнера.
Пример
// back_insert_iterator_reference.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <iostream>
int main( )
{
using namespace std;
int i;
vector<int> vec;
for (i = 1 ; i < 4 ; ++i )
{
vec.push_back ( i );
}
vector <int>::iterator vIter;
cout << "The vector vec is: ( ";
for ( vIter = vec.begin ( ) ; vIter != vec.end ( ); vIter++)
cout << *vIter << " ";
cout << ")." << endl;
back_insert_iterator<vector<int> >::reference
RefLast = *(vec.end ( ) - 1 );
cout << "The last element in the vector vec is: "
<< RefLast << "." << endl;
}
The vector vec is: ( 1 2 3 ).
The last element in the vector vec is: 3.
См. также
<iterator>
Потокобезопасность в стандартной библиотеке C++
Справочник по стандартной библиотеке C++