我目前正在尝试为列表编写排序函数。我的代码是:
#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)
你能帮我查一下确切的问题吗?
答案 0 :(得分:1)
您的函数需要引用,并将其与sort(List);
一起使用。
注意:除非您将此作为练习,否则您更喜欢使用提供的sort
容器或通用std::sort
。
答案 1 :(得分:1)
T&
类型的参数,但后来将其视为std::list<T>
。该函数应该采用std::list<T>&
,或者您应该将迭代器声明为T::iterator
类型。it2!=mylist.end()-it1
对我没有意义。你真的想从另一个中减去一个迭代器吗?我认为链接列表迭代器不支持。结果肯定不会是另一个迭代器,所以你无法比较它。也许最后的-it1
不应该在那里?答案 2 :(得分:0)
sort(&List) ------> sort(List)