c++ - 在模板类中使用排序 (C++)

标签 c++ stl

我想用标准算法 std::sort 对我的列表进行排序。

这是我的尝试:

#include <list>
#include <algorithm>

template<typename T>
class MyList {
private:
    std::list<T> myList;        
public:
    void add(T item) {
        myList.push_back(item);
    }

    void mySort() {
        std::sort(myList.begin(), myList.end());
    }
};

编译错误:

    c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\stl_algo.h:5475:22: note: candidates are:
In file included from c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\stl_algobase.h:67:0,
                 from c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\char_traits.h:39,
                 from c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\ios:40,
                 from c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\ostream:38,
                 from c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\iostream:39,
                 from ..\src\firstone.cpp:1:
c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\stl_iterator.h:327:5: note: template<class _Iterator> typename std::reverse_iterator<_Iterator>::difference_type std::operator-(const std::reverse_iterator<_Iterator>&, const std::reverse_iterator<_Iterator>&)
     operator-(const reverse_iterator<_Iterator>& __x,
     ^
c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\stl_iterator.h:327:5: note:   template argument deduction/substitution failed:
In file included from c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\algorithm:62:0,
                 from ..\src\mylist.h:5,
                 from ..\src\firstone.cpp:2:
c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\stl_algo.h:5475:22: note:   'std::_List_iterator<int>' is not derived from 'const std::reverse_iterator<_Iterator>'
     std::__lg(__last - __first) * 2);
                      ^
In file included from c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\stl_algobase.h:67:0,
                 from c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\char_traits.h:39,
                 from c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\ios:40,
                 from c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\ostream:38,
                 from c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\iostream:39,
                 from ..\src\firstone.cpp:1:
c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\stl_iterator.h:384:5: note: template<class _IteratorL, class _IteratorR> typename std::reverse_iterator<_Iterator>::difference_type std::operator-(const std::reverse_iterator<_Iterator>&, const std::reverse_iterator<_IteratorR>&)
     operator-(const reverse_iterator<_IteratorL>& __x,
     ^
c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\stl_iterator.h:384:5: note:   template argument deduction/substitution failed:
In file included from c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\algorithm:62:0,
                 from ..\src\mylist.h:5,
                 from ..\src\firstone.cpp:2:
c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\stl_algo.h:5475:22: note:   'std::_List_iterator<int>' is not derived from 'const std::reverse_iterator<_Iterator>'
     std::__lg(__last - __first) * 2);
                      ^

18:57:32 Build Finished (took 986ms)

我做错了什么?

最佳答案

您正在尝试对列表进行排序。列表不支持 std::sort 工作所需的随机访问迭代器。 (列表仅支持双向迭代器。)

在我看来,这是来自“C++ 大神”的错误逻辑。

您可以使用 list::sort 成员函数对列表进行排序。

关于c++ - 在模板类中使用排序 (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20871562/

相关文章:

c++ - 我需要什么样的类结构?

c++ - 如何在不初始化每个元素的情况下为数组保留空间?

c++ - 如何使用 Boost Spirit 提取修剪后的文本?

c++ - 按引用传递指针未按预期工作

c++ - 为 x,y,z 坐标实现 operator<

c++ - 是否有任何 std::set 实现不使用红黑树?

c++ - 大型项目的 Emacs 教程

c++ - 列表迭代器不可递增 - 运行时错误

C++:STL 错误 C2064

c++ - 使用 C++ STL 迭代器而不是传统指针的正确方法是什么?