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行的分段错误.
如果迭代器到达列表中的最后一个元素,您的代码将失败.当发生这种情况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)