Шаблонна функція std::unique призначена для видалення послідовностей еквівалентних елементів у вказаному проміжку. Оголошення функції виглядає наступним чином:
template <class ForwardIterator>
  ForwardIterator unique (ForwardIterator first, ForwardIterator last) ;
Параметри ітератори first i last призначені для вказування проміжку, у якому повинно виконуватися видалення послідовностей еквівалентних елементів. Функція залишає лише унікальні значення тільки у сортованій послідовності. Функція не повинна змінювати властивості елементів послідовності і її розмір. Видалення виконується завдяки заміні повторюваних значень відмінними новими. Повернене значення вказує на елемент, який стоїть після останнього обробленого. Усі наступні елементи разом з даним, являються валідними, але їх значення невизначені. Щоб використовувати дану функцію необхідно підключити файл algorithm
#include <algorithm> /* усе корисне разом з unique */

Приклад

Розглянемо простий приклад використання даної функції відносно сортованої і несортованої послідовності вектора.
#include <iostream> /* об'єкт cout */
#include <algorithm> /* функція unique */
#include <vector> /* клас vector */
using namespace std ; /* друкуємо усе без std */

/* головна функція програми */
int main (int argc, char** argv)
{
  /* створюємо примірники піддослідних векторів
  ** v1 для несортованої послідовності,
  ** а v2 для сортованої */
  vector <int> v1, v2 ;
  
  /* заповнюємо два вектори послідовностями чисел
  ** за допомогою функції resize */
  v1.resize (2 , 10) ;
  v1.resize (4 , 20) ;
  v1.resize (6 , 50) ;
  v1.resize (8 , 20) ;
  v1.resize (10, 50) ;
  
  v2.resize (2 , 10) ;
  v2.resize (4 , 20) ;
  v2.resize (6 , 30) ;
  v2.resize (8 , 40) ;
  v2.resize (10, 50) ;
  
  /* виводимо вектори для наглядності у термінал */
  for (vector<int>::iterator iter=v1.begin(); iter!=v1.end(); ++iter)
  { cout << *iter << "; " ; }
  cout << endl ;
  for (vector<int>::iterator iter=v2.begin(); iter!=v2.end(); ++iter)
  { cout << *iter << "; " ; }
  cout << endl << endl ;
  
  /* виконуємо скорочення участків з послідовностями 
  ** еквівалентних елементів на двох векторах */
  vector<int>::iterator rester1 = unique (v1.begin(), v1.end()) ;
  vector<int>::iterator rester2 = unique (v2.begin(), v2.end()) ;
  
  /* виводимо результат на екран */
  for (vector<int>::iterator iter=v1.begin(); iter!=rester1; ++iter)
  { cout << *iter << "; " ; }
  cout << endl ;
  for (vector<int>::iterator iter=v2.begin(); iter!=rester2; ++iter)
  { cout << *iter << "; " ; }
  cout << endl ;
  
  return 0 ;
}
Вивід програми наступний: cpp_std_unique_sample1-cxxЯк бачимо перша, несортована послідовність, містить у собі не унікальні елементи 20, 50. А друга, сортована, мітстить тільки унікальні елементи, завдяки тому, що її дубльовані елементи були розміщені разом.
Категорії: