我在C++ 11中遇到了一些困难.我想创建函数isSorted
,如果我std::forward_list
已经排序则返回true,否则返回false.
我想象过这样的代码:
templatebool estTriee(forward_list & list) { typename forward_list ::iterator it; it = list.begin(); while(it != list.end() && *it <= *next(it, 1)) { it++; } return it == list.end(); }
但是gcc会给我一个围绕while行的分段错误.
如果迭代器到达列表中的最后一个元素,您的代码将失败.当发生这种情况std::next(it)
等于list.end()
并且取消引用end()
迭代器是错误的(在这种情况下导致段错误).
我的建议是std::is_sorted
在标准库中使用该算法.它已经编写,调试,并做你想要的.
templatebool estTriee(const std::forward_list & list) { return std::is_sorted(list.begin(), list.end()); }