算法forward_list是排序的?

Cou*_*uim 2 c++ sorting algorithm c++11 forward-list

我在C++ 11中遇到了一些困难.我想创建函数isSorted,如果我std::forward_list已经排序则返回true,否则返回false.

我想象过这样的代码:

template<class T>
bool estTriee(forward_list<T>& list) {
        typename forward_list<T>::iterator it;
        it = list.begin();

        while(it != list.end() &&  *it <= *next(it, 1)) {
            it++;
        }

        return it == list.end();
}
Run Code Online (Sandbox Code Playgroud)

但是gcc会给我一个围绕while行的分段错误.

Bla*_*ace 6

如果迭代器到达列表中的最后一个元素,您的代码将失败.当发生这种情况std::next(it)等于list.end()并且取消引用end()迭代器是错误的(在这种情况下导致段错误).

我的建议是std::is_sorted在标准库中使用该算法.它已经编写,调试,并做你想要的.

template<class T>
bool estTriee(const std::forward_list<T>& list) {
    return std::is_sorted(list.begin(), list.end());
}
Run Code Online (Sandbox Code Playgroud)