|
Программирование >> Инициализация объектов класса, структура
template < class Predicate > 12.6.3. Операция list::remove if() void list::remove if( Predicate pred ); Операция remove if() удаляет все элементы, для которых выполняется указанное class Even { public: bool operator()( int elem ) { return ! (elem % 2 ); } условие, т. е. предикат pred возвращает true. Например: ilist1.remove if( Even() ); удаляет все четные числа из списка, определенного при рассмотрении merge() . 12.6.4. Операция list::reverse() void list::reverse(); int array1[ 10 ] = { 34, 0, 8, 3, 1, 13, 2, 5, 21, 1 }; int array2[ 5 ] = { 377, 89, 233, 55, 144 }; list< int > ilist1( array1, array1 + 10 ); list< int > ilist2( array2, array2 + 5 ); для объединения требуется, чтобы оба списка б1 упорядочен! ilist1.sort(); ilist2.sort(); ilist1.merge( ilist2 ); После выполнения операции merge () список ilist2 пуст, а ilist1 содержит первые 15 чисел Фибоначчи в порядке возрастания. 12.6.2. Операция list::remove() void list::remove( const elemType &value ); Операция remove() удаляет все элемента: с заданн1м значением: ilist1.remove( 1 ); void list::sort(); template <class Compare> 12.6.5. Операция list::sort() void list::sort( Compare comp ); По умолчанию sort() упорядочивает элементы списка по возрастанию с помощью оператора меньше , определенного в классе элементов контейнера. Вместо этого можно явно передать в качестве аргумента оператор сравнения. Так, list1.sort(); упорядочивает list1 по возрастанию, а list1.sort( greater<int>() ); упорядочивает list1 по убыванию, используя оператор больше . void list::splice( iterator pos, list rhs ); void list::splice( iterator pos, list rhs, iterator ix ); void list::splice( iterator pos, list rhs, 12.6.6. Операция list::splice() iterator first, iterator last ); Операция splice() имеет три формы: перемещение одного элемента, всех элементов или диапазона из одного списка в другой. В каждом случае передается итератор, указывающий на позицию вставки, а перемещаемые элементы располагаются int array[ 10 ] = { 0, 1, 1, 2, 3, 5, 8, 13, 21, 34 }; list< int > ilist1 ( array, array + 10 ); непосредственно перед ней. Если даны два списка: list< int > ilist2( array, array + 2 ); содержит 0, 1 то следующее обращение к splice() перемещает первый элемент ilist1 в ilist2. Теперь ilist2 содержит элементы 0, 1 и 0, тогда как в ilist1 элемента 0 больше нет. Операция reverse() изменяет порядок следования элементов списка на противоположный: ilist1.reverse(); ilist2.end() указает на позицию, куда нужно переместить элемент элементы вставляются перед этой позицией ilist1 указывает на список, из которого перемещается элемент ilist1.begin() указывает на сам перемещаема элемент ilis2.splice( ilist2.end(), ilist1, ilist1.begin() ); В следующем примере применения splice() передаются два итератора, list< int >::iterator first, last; first = ilist1.find( 2 ); last = ilist1.find( 13 ); ограничивающие диапазон перемещаемых элементов: ilist2.splice( ilist2.begin(), ilist1, first, last ); В данном случае элементы 2, 3, 5 и 8 удаляются из ilist1 и вставляются в начало ilist2. Теперь ilist1 содержит пять элементов 1, 1, 13, 21 и 34. Для их перемещения list< int >::iterator pos = ilist2.find( 5 ); в ilist2 можно воспользоваться третьей вариацией операции splice() : ilist2.splice( pos, ilist1 ); Итак, список ilist1 пуст. Последние пять элементов перемещены в позицию списка ilist2, предшествующую той, которую занимает элемент 5. void list::unique(); template <class BinaryPredicate> 12.6.7. Операция list::unique() void list::unique( BinaryPredicate pred ); Операция unique() удаляет соседние дубликаты. По умолчанию при сравнении используется оператор равенства, определенный для типа элементов контейнера. Например, если даны значения {0,2,4,6,4,2,0}, то после применения unique() список останется таким же, поскольку в соседних позициях дубликатов нет. Но если мы сначала отсортируем список, что даст {0,0,2,2,4,4,6}, а потом применим unique(), то получим четыре различных значения {0,2,4,6}. ilist.unique(); Вторая форма unique() принимает альтернативный оператор сравнения. Например,
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |