#if 1
/* vector 的排序 */
#include <iostream>
#include <vector>
#include <algorithm> /* vector 调用algorithm里面的sort */
void printVector(std::vector<int> vVector);
bool ageCompare(int a, int b);
int main()
{
std::vector<int> ageVector;
ageVector.push_back(1);
ageVector.push_back(3);
ageVector.push_back(2);
printVector(ageVector);
std::sort(ageVector.begin(), ageVector.end(), ageCompare);
std::cout << "+++++++++++++++++++" << std::endl;
printVector(ageVector);
return 0;
}
bool ageCompare(int a, int b)
{
return a > b;
}
void printVector(std::vector<int> vVector)
{
if (vVector.empty())
{
return;
}
for (auto iter : vVector)
{
std::cout << iter << std::endl;
}
return;
}
#endif
/* 这是algorithm里面的sort */
template <class _RanIt, class _Pr>
_CONSTEXPR20 void sort(const _RanIt _First, const _RanIt _Last, _Pr _Pred) { // order [_First, _Last)
_Adl_verify_range(_First, _Last);
const auto _UFirst = _Get_unwrapped(_First);
const auto _ULast = _Get_unwrapped(_Last);
_Sort_unchecked(_UFirst, _ULast, _ULast - _UFirst, _Pass_fn(_Pred));
}
=========================================================================
#if 1
#include <iostream>
#include <list>
//typedef struct
//{
// std::string name;
// unsigned age;
//}STU;
void printList(std::list<int> vList);
bool ageCompare(int a, int b);
int main()
{
std::list<int> age_lsit;
age_lsit.push_back(1);
age_lsit.push_back(2);
age_lsit.push_back(5);
age_lsit.push_back(4);
age_lsit.push_back(2);
printList(age_lsit);
age_lsit.sort(ageCompare);
std::cout << "+++++++++++++++++++" << std::endl;
printList(age_lsit);
return 0;
}
bool ageCompare(int a, int b)
{
return a < b;
}
void printList(std::list<int> vList)
{
if (vList.empty())
{
return;
}
for (auto iter : vList)
{
std::cout << iter << std::endl;
}
return;
}
#endif
/* 这个是list调用的sort sort是list类的成员方法 */
template <class _Pr2>
void sort(_Pr2 _Pred) { // order sequence
auto& _My_data = _Mypair._Myval2;
_Scary_val::_Sort(_My_data._Myhead->_Next, _My_data._Mysize, _Pass_fn(_Pred));
}
分析:
为什么list不能使用algorithm里面的sort,注意:void sort(const _RanIt _First, const _RanIt _Last, _Pr _Pred),algorithm里面的sort参数const _RanIt _First, const _RanIt _Last,说明其接收的是是一个支持随机访问的迭代器,vector的底层是数组支持随机访问迭代器,list的底层是链表不支持随机访问,即不说了。
版权声明:本文为u010843408原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。