@specsoftdev live:.cid.8e17e9b93cabb607 specsoftdev@gmail.com
std::unique
Актуально для C++23.

#include <algorithm>
Актуально на 2024-02-29.



Define overload #1
template<class ForwardIterator>
constexpr inline ForwardIterator
unique(ForwardIterator first, ForwardIterator last);

Переместит дублирующие элементы, которые расположены друг за другом, из диапазона [first, last], в его конец.
Элементы сравниваются с помощью оператора сравнения "==".
Вернёт итератор указывающий на конец нового диапазона.
Example, possible implementation
Define overload #2
template <class ExecutionPolicy, class ForwardIterator, class BinaryPredicate>
ForwardIterator unique(ExecutionPolicy&& exec, ForwardIterator first,
                       ForwardIterator last, BinaryPredicate pred);

Example, possible implementation
Define overload #3
template<class ForwardIterator, class BinaryPredicate>
constexpr inline ForwardIterator
unique(ForwardIterator first, ForwardIterator last, BinaryPredicate pred)

Переместит дублирующие элементы, которые расположены друг за другом, из диапазона [first, last], в его конец.
Для сравнения элементов применяется бинарный предикат pred.
Вернёт итератор указывающий на конец нового диапазона.
Example, possible implementation
Define overload #4
template <class ExecutionPolicy, class ForwardIterator>
ForwardIterator unique(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last);

Example, possible implementation

Examples


Example 1:
#include <iostream>
#include <algorithm>
#include <string>

int main()
{
    std::string str{"aabccdedfff"};
    auto end = std::unique(std::begin(str), std::end(str));

    for (auto start = std::begin(str); start != end; ++start)
    {
        std::cout << *start;
    }
    return 0;
}

abcdedf



Example 2:
#include <iostream>
#include <algorithm>
#include <string>

int main()
{
    auto pred = [](auto a1, auto a2) {
        return a1 == a2;
    };

    std::string str{"aabccdedfff"};
    auto end = std::unique(std::begin(str), std::end(str), pred);

    for (auto start = std::begin(str); start != end; ++start)
    {
        std::cout << *start;
    }
    return 0;
}

abcdedf




Changelog

C++26
TODO
C++23
TODO
C++20
TODO
C++17
TODO
C++14
TODO
C++11
TODO


See also

TODO

This page was last modified on 2024-02-29