2016-01-06 76 views
2

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

我想象这样的代码:

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(); 
} 

但是GCC返回我的周围,而线分段错误。

回答

6

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

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

template<class T> 
bool estTriee(const std::forward_list<T>& list) { 
    return std::is_sorted(list.begin(), list.end()); 
} 
+0

感谢您的回答! 我会尝试这个,但我知道它会工作得很好 –