vimer linux kernel 爱好者

c++之基础算法

2021-04-06

何谓c++的基础算法? 就是那些基本的算法,比如 reverse, is_sorted, is_unique等。这些usage在一些场景下使用的比较多。

std::is_sorted

std::is_sorted 用来判断一个容器是否为一个已排序的容器,比如[1,2.3],然后有一个不满足就会return false;

    vector<int> ans = [1,2,3];
    if(std::is_sorted(std::begin(res), std::end(res)))
        return true;

具体的实现可能为:

template<class ForwardIt>
bool is_sorted(ForwardIt first, ForwardIt last)
{
    return std::is_sorted_until(first, last) == last;
}

这样的用法还是挺多的。

is_unique

根据这篇文章,

std::unique(begin(nums), end(nums)) != end(nums)

说实在的,这个用法还是搞蒙我了。

一个可能的实现就是:

template<class ForwardIt>
ForwardIt unique(ForwardIt first, ForwardIt last)
{
    if (first == last)
        return last;

    ForwardIt result = first;
    while (++first != last) {
        if (!(*result == *first) && ++result != first) {
            *result = std::move(*first);
        }
    }
    return ++result;
}

Comments

Content