【持续送分】list.sort()带二元谓词参数的疑问

shiguojie19892 2013-05-01 08:07:17
下面是《21天学通C++》中的例题(p299):
#include <LIST>
#include <IOSTREAM>

using namespace std;

void PrintListContents(const list <int>& listInput);
void PrintListContents(const list <int>& listInput)
{
if (listInput.size() > 0)
{
//Write valuse to the screen...
cout << "{ ";

std::list <int> ::const_iterator ielementLocator;
for(ielementLocator = listInput.begin();
ielementLocator != listInput.end();
ielementLocator++)
{
cout << *ielementLocator << " ";
}
cout << "}" << endl << endl;
}
else
cout << "List is empty!" << endl;
}

bool SortPredicate_Descending(const int& lsh, const int& rsh);

bool SortPredicate_Descending(const int& lsh, const int& rsh)
{
return(rsh < lsh);
}

int main(void)
{
std::list <int> listIntegers;

//Insert elements at the begining...
listIntegers.push_front(444);
listIntegers.push_front(300);
listIntegers.push_front(21111);

listIntegers.push_front(-1);
listIntegers.push_front(0);

//Insert an element at the end...
listIntegers.push_back(-5);

cout << "Initial contents of the list are - " << endl;
PrintListContents(listIntegers);

listIntegers.sort();

cout << "Order of elements after sort(): " << endl;
PrintListContents(listIntegers);

listIntegers.sort(SortPredicate_Descending);
cout << "Order of elements after sort() with a predicate: " << endl;

PrintListContents(listIntegers);

return 0;
}

其中在
	listIntegers.sort(SortPredicate_Descending);
中的SortPredicate_Descending没有参数,这是错误吗?
...全文
112 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
疯狂的红豆 2013-05-02
  • 打赏
  • 举报
回复
STL中的list是一个较特殊的容器,很多算法都有一份是针对list单独实现的,比如sort排序算法,在sort算法本是算法库中的东西,但是这个sort的实现是基于赋值操作的,但是list的特殊性就为list单独实现了一个版本。 算法库的函数: void sort(_RanIt _First, _RanIt _Last, _Pr _Pred) //最后一个参数就是一元判断式(本质是函数) void sort(_RanIt _First, _RanIt _Last) 但是list中的sort函数只需一个参数,那就是一个排序准则了(本质是函数)。 传入的排序准则函数只是函数名也就是函数指针就行了,不需要参数
shiguojie19892 2013-05-02
  • 打赏
  • 举报
回复
引用 5 楼 ZLhy_ 的回复:
STL中的list是一个较特殊的容器,很多算法都有一份是针对list单独实现的,比如sort排序算法,在sort算法本是算法库中的东西,但是这个sort的实现是基于赋值操作的,但是list的特殊性就为list单独实现了一个版本。 算法库的函数: void sort(_RanIt _First, _RanIt _Last, _Pr _Pred) //最后一个参数就是一元判断式(本质是函数) void sort(_RanIt _First, _RanIt _Last) 但是list中的sort函数只需一个参数,那就是一个排序准则了(本质是函数)。 传入的排序准则函数只是函数名也就是函数指针就行了,不需要参数
谢谢各位!
aj3423 2013-05-02
  • 打赏
  • 举报
回复
函数作为参数,sort内部调用该函数时候会传具体参数,所以sort只要知道函数地址就好了 还是不理解的话可以搜索 函数式编程
buyong 2013-05-02
  • 打赏
  • 举报
回复
the parameter of SortPredicate_Descending is the element of that list.
turing-complete 2013-05-01
  • 打赏
  • 举报
回复
不好意思,我搞错了。 没有参数,是因为SortPredicate_Descending本身作为一个函数指针,也可以作为实参。
shiguojie19892 2013-05-01
  • 打赏
  • 举报
回复
引用 1 楼 mougaidong 的回复:
这说明list存储的数据类型,已经实现了 < 的语义
没有明白,能说的详细一点吗?
turing-complete 2013-05-01
  • 打赏
  • 举报
回复
这说明list存储的数据类型,已经实现了 < 的语义

64,651

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧