12.6.7. Операция list::unique()

12.6.7. Операция list::unique()

void list::unique();

template class BinaryPredicate

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() принимает альтернативный оператор сравнения. Например,

class EvenPair {

public:

bool operator()( int val1, val2 )

{ return ! (val2 % val1 ); }

};

ilist.unique( EvenPair() );

удаляет соседние элементы, если второй элемент без остатка делится на первый.

Эти операции, являющиеся членами класса, следует предпочесть соответствующим обобщенным алгоритмам при работе со списками. Остальные обобщенные алгоритмы, такие, как find(), transform(), for_each() и т.д., работают со списками так же эффективно, как и с другими контейнерами (еще раз напомним, что подробно все алгоритмы рассматриваются в Приложении).

Упражнение 12.8

Измените программу из раздела 12.2, используя список вместо вектора.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Список (List)

Из книги Руководство по стандартной библиотеке шаблонов (STL) автора Ли Менг

Список (List) list - вид последовательности, которая поддерживает двунаправленные итераторы и позволяет операции вставки и стирания с постоянным временем в любом месте последовательности, с управлением памятью, обрабатываемым автоматически. В отличие от векторов и


Убрать повторы (Unique)

Из книги Язык программирования С# 2005 и платформа .NET 2.0. [3-е издание] автора Троелсен Эндрю

Убрать повторы (Unique) template ‹class ForwardIterator›ForwardIterator unique(ForwardIterator first, ForwardIterator last);template ‹class ForwardIterator, class BinaryPredicate›ForwardIterator unique(ForwardIterator first, ForwardIterator last, BinaryPredicate binary_pred);unique устраняет все, кроме первого, элементы из каждой последовательной группы равных элементов, указываемые


Тип List‹T›

Из книги Основы объектно-ориентированного программирования автора Мейер Бертран


Unique-значения

Из книги MySQL: руководство профессионала автора Паутов Алексей В

Unique-значения Иногда при разработке программ возникает потребность в сущности, принимающей лишь несколько значений, характеризующих возможные ситуации. Так, операция чтения может вернуть код результата, значениями которого будут признаки успешной операции, ошибки при


Unique-значения и перечислимые типы

Из книги XSLT автора Хольцнер Стивен

Unique-значения и перечислимые типы Pascal и производные от него языки допускают описание переменной видаcode: ERRORгде ERROR - это "перечислимый тип":type ERROR = (Normal, Open_error, Read_error)Переменная code может принимать только значения типа ERROR. Мы уже видели, как добиться того же самого в ОО-нотации:


У18.2 Однократные функции для эмуляции unique-значений

Из книги Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ автора Борри Хелен

У18.2 Однократные функции для эмуляции unique-значений Покажите, что в языке без поддержки unique-объявлений результат, аналогичныйvalue: INTEGER is uniqueможно получить, воспользовавшись объявлением видаvalue: INTEGER is once...endгде вам необходимо написать тело однократной функции и все, что


Создание списка:

Из книги автора

Создание списка: <fo:list-block> Для начала воспользуйтесь элементом <fo:list-block>, чтобы создать список XSL-FO; этот объект содержит элементы <fo:list-item>, содержащие данные списка.С элементом <fo:list-block> можно применять следующие свойства:• общие свойства доступа: source-document,


Ограничения UNIQUE

Из книги автора

Ограничения UNIQUE Ограничение UNIQUE, как и ограничение первичного ключа, гарантирует, что никакие две строки не будут иметь то же значение указанного столбца или группы столбцов. Вы можете объявить для таблицы более одного ограничения UNIQUE, но оно не может использовать тот же


12.6.2. Операция list::remove()

Из книги автора

12.6.2. Операция list::remove() void list::remove( const elemType &value );Операция remove() удаляет все элементы с заданным значением:ilist1.remove( 1


12.6.3. Операция list::remove_if()

Из книги автора

12.6.3. Операция list::remove_if() template class Predicate void list::remove_if( Predicate pred );Операция remove_if() удаляет все элементы, для которых выполняется указанное условие, т.е. предикат pred возвращает true. Например:class Even {public:bool operator()( int elem ) { return ! (elem % 2 ); }};ilist1.remove_if( Even() );удаляет все четные числа из списка,


12.6.4. Операция list::reverse()

Из книги автора

12.6.4. Операция list::reverse() void list::reverse();Операция reverse() изменяет порядок следования элементов списка на


12.6.5. Операция list::sort()

Из книги автора

12.6.5. Операция list::sort() void list::sort();template class Comparevoid list::sort( Compare comp );По умолчанию sort() упорядочивает элементы списка по возрастанию с помощью оператора "меньше", определенного в классе элементов контейнера. Вместо этого можно явно передать в качестве аргумента оператор


12.6.6. Операция list::splice()

Из книги автора

12.6.6. Операция list::splice() void list::splice( iterator pos, list rhs );void list::splice( iterator pos, list rhs, iterator ix );void list::splice( iterator pos, list rhs,iterator first, iterator last );Операция splice() имеет три формы: перемещение одного элемента, всех элементов или диапазона из одного списка в другой. В каждом случае передается итератор,