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, используя список вместо вектора.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Создание списка: <fo:list-block>
Создание списка: <fo:list-block> Для начала воспользуйтесь элементом <fo:list-block>, чтобы создать список XSL-FO; этот объект содержит элементы <fo:list-item>, содержащие данные списка.С элементом <fo:list-block> можно применять следующие свойства:• общие свойства доступа: source-document,
Список (List)
Список (List) list - вид последовательности, которая поддерживает двунаправленные итераторы и позволяет операции вставки и стирания с постоянным временем в любом месте последовательности, с управлением памятью, обрабатываемым автоматически. В отличие от векторов и
Убрать повторы (Unique)
Убрать повторы (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 устраняет все, кроме первого, элементы из каждой последовательной группы равных элементов, указываемые
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() имеет три формы: перемещение одного элемента, всех элементов или диапазона из одного списка в другой. В каждом случае передается итератор,
Ограничения UNIQUE
Ограничения UNIQUE Ограничение UNIQUE, как и ограничение первичного ключа, гарантирует, что никакие две строки не будут иметь то же значение указанного столбца или группы столбцов. Вы можете объявить для таблицы более одного ограничения UNIQUE, но оно не может использовать тот же
Unique-значения
Unique-значения Иногда при разработке программ возникает потребность в сущности, принимающей лишь несколько значений, характеризующих возможные ситуации. Так, операция чтения может вернуть код результата, значениями которого будут признаки успешной операции, ошибки при
Unique-значения и перечислимые типы
Unique-значения и перечислимые типы Pascal и производные от него языки допускают описание переменной видаcode: ERRORгде ERROR - это "перечислимый тип":type ERROR = (Normal, Open_error, Read_error)Переменная code может принимать только значения типа ERROR. Мы уже видели, как добиться того же самого в ОО-нотации:
У18.2 Однократные функции для эмуляции unique-значений
У18.2 Однократные функции для эмуляции unique-значений Покажите, что в языке без поддержки unique-объявлений результат, аналогичныйvalue: INTEGER is uniqueможно получить, воспользовавшись объявлением видаvalue: INTEGER is once...endгде вам необходимо написать тело однократной функции и все, что