Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Описывает адаптер итератора, удовлетворяющий требованиям итератора вывода. Вставляет, а не перезаписывает элементы в конечную часть последовательности, тем самым предоставляя семантику, отличную от семантики перезаписи, предоставляемой итераторами контейнеров последовательности C++. Класс back_insert_iterator шаблонизируется в типе контейнера.
Синтаксис
template <class Container>
class back_insert_iterator;
Параметры
Контейнер
Тип контейнера, в конец которого итератор back_insert_iterator вставит элементы.
Замечания
Контейнер должен удовлетворять требованиям последовательности вставки в конечную часть, если можно вставить элементы в конец последовательности в постоянном времени с поправкой на амортизацию. Контейнеры последовательности стандартной библиотеки C++, определенные классами deque, list и vector, предоставляют необходимую функцию-член push_back и удовлетворяют данным требованиям. Эти три контейнера и строки могут быть адаптированы для использования с back_insert_iterators. Итератор 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++