Лекции (12) (1119483), страница 2
Текст из файла (страница 2)
Возвращает итератор элемента, следующего за удаленным.iterator erase (iterator st, iterator fin); // удалению подлежат все элементы// между st и fin, но fin не удаляется. Возвращает fin.Iterator insert ( iterator i , const Т& value = T()); // вставка некоторого// значения value перед i. Возвращает итератор вставленного элемента).void insert (iterator i , size_type n, const T&value); // вставка n копий// элементов со значением value перед i.void push_back ( const T&value ) ; // добавляет элемент в конец вектораvoid pop_back () ; // удаляет последний элемент (не возвращает значение!)size_type size() const; // выдает количество элементов вектораbool empty () const; // возвращает истину, если вызывающий вектор пустvoid clear(); //удаляет все элементы вектора....}21Контейнер listtemplate < class T , class A = allocator < T > > сlass list {...........public:// Типы//……..// Итераторы//……..//// Доступ к элементам//reference front (); // первый элемент спискаconst_reference front () const;reference back (); // последний элемент спискаconst_reference back () const;22Контейнер list// Конструкторы, деструктор, operator=//explicit list (const A& = A()); // создается список нулевой длиныexplicit list (size_type n; const T& value = T(); const A& = A());// создается список из n элементов со значением value// (или с "нулями" типа Т, если второй параметр отсутствуетtemplate <class I> list (I first, I last, const A& = A());// инициализация списка копированием элементов из [first, last),// I - итератор для чтенияlist (const list < T, A > & obj ); // конструктор копированияlist& operator = (const list < T, A > & obj );~list();23Контейнер list//Некоторые функции-члены класса list//iterator erase (iterator i ); // удаляет элемент, на который указывает данный// итератор.
Возвращает итератор элемента, следующего за удаленным.iterator erase (iterator st, iterator fin); // удалению подлежат все элементы// между st и fin, но fin не удаляется. Возвращает fin.Iterator insert ( iterator i , const Т& value = T()); // вставка некоторого// значения value перед i. Возвращает итератор вставленного элемента).void insert (iterator i , size_type n, const T&value); // вставка n копий// элементов со значением value перед i.void push_back ( const T&value ) ; // добавляет элемент в конец спискаvoid push_front ( const T&value ) ; // добавляет элемент в начало спискаvoid pop_back ( ) ; // удаляет последний элемент (не возвращает значение!)void pop_front ( ) ; // удаляет первый элемент спискаsize_type size( ) const; // выдает количество элементов спискаbool empty ( ) const; // возвращает истину, если вызывающий список пустvoid clear( ); // удаляет все элементы списка……….24}Пример использования STLФункция, формирующая по заданному вектору целых чисел списокиз элементов вектора с четными значениями ираспечатывающая его.# include < iostream ># include < vector ># include < list >using namespace std;void g (vector <int> & v, list <int> & lst) {int i;for (i = 0; i < v.size( ); i++)if ( ! ( v[ i ] % 2 ) )lst.push_back( v[ i ] );list < int > :: const_iterator p = lst.begin ();while ( p != lst.end ( ) ) {cout << *p << endl;p++;}}25Достоинства STL - подхода•Каждый контейнер обеспечивает стандартный интерфейс в виденабора операций, так что один контейнер может использоватьсявместо другого, причем это не влечет существенного изменения кода.•Дополнительная общность использования обеспечивается черезстандартные итераторы.•Каждый контейнер связан с распределителем памяти - аллокатором,который можно переопределить с тем, чтобы реализоватьсобственный механизм распределения памяти.•Для каждого контейнера можно определить дополнительныеитераторы и интерфейсы, что позволит оптимальным образомнастроить его для решения конкретной задачи.•Контейнеры по определению однородны, т.е.
должны содержатьэлементы одного типа, но возможно создание разнородныхконтейнеров как контейнеров указателей на общий базовый класс.•Алгоритмы, входящие в состав STL, предназначены для работы ссодержимым контейнеров. Все алгоритмы представляют собойшаблонные функции, следовательно, их можно использовать дляработы с любым контейнером.26.