如何为列表编写排序函数?

时间:2014-01-24 10:53:19

标签: c++ list function

我目前正在尝试为列表编写排序函数。我的代码是:

#include <iostream>
#include <iterator>
#include <algorithm>
#include <list>
#include <string>
using namespace std;

template<typename T>
void sort(T &mylist)
{ 
        typename std::list<T>::iterator it1;
        typename std::list<T>::iterator it2;
        for(it1=mylist.begin();it1!=mylist.end();it1++)
            for(it2=mylist.begin();it2!=mylist.end()-it1;it2++)
                if((*((it2)+1))<*it2)
                    swap((*((it2)+1)),*it2);
             cout << *it1 << ' ';
}    
int main()
{   
        list<int> List;
        List.push_back(1); 
        List.push_back(12); 
        sort(List);
        return 0;
}

编译失败:

  error C2678: binary '!=' : no operator found which takes a left-hand operand of type 'std::_List_iterator<_Mylist>' (or there is no acceptable conversion)
  error C2784: ''unknown-type' std::operator -(const std::_Revranit<_RanIt,_Base> &,const std::_Revranit<_RanIt2,_Base2> &)' : could not deduce template argument for 'const std::_Revranit<_RanIt,_Base> &' from 'std::_List_iterator<_Mylist>'
  error C2676: binary '-' : 'std::_List_iterator<_Mylist>' does not define this operator or a conversion to a type acceptable to the predefined operator
  error C2679: binary '<<' : no operator found which takes a right-hand operand of type 'std::list<_Ty>' (or there is no acceptable conversion)

你能帮我查一下确切的问题吗?

3 个答案:

答案 0 :(得分:1)

您的函数需要引用,并将其与sort(List);一起使用。

注意:除非您将此作为练习,否则您更喜欢使用提供的sort容器或通用std::sort

答案 1 :(得分:1)

  1. 您的函数采用T&类型的参数,但后来将其视为std::list<T>。该函数应该采用std::list<T>&,或者您应该将迭代器声明为T::iterator类型。
  2. 表达式it2!=mylist.end()-it1对我没有意义。你真的想从另一个中减去一个迭代器吗?我认为链接列表迭代器不支持。结果肯定不会是另一个迭代器,所以你无法比较它。也许最后的-it1不应该在那里?

答案 2 :(得分:0)

sort(&List) ------> sort(List)