10014list05反转和排序

197 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第3天,点击查看活动详情

1 list 反转和排序

1.1 功能描述:

  • 将容器中的元素反转,以及将容器中的数据进行排序

1.2 函数原型:

  • reverse(); //反转链表
  • sort(); //链表排序

1.3 代码示例:

void printList(const list<int>& L) {

	for (list<int>::const_iterator it = L.begin(); it != L.end(); it++) {
		cout << *it << " ";
	}
	cout << endl;
}

bool myCompare(int val1 , int val2)
{
	return val1 > val2;
}

//反转和排序
void test01()
{
	list<int> L;
	L.push_back(90);
	L.push_back(30);
	L.push_back(20);
	L.push_back(70);
	printList(L);

	//反转容器的元素
	L.reverse();
	printList(L);

	//排序
	L.sort(); //默认的排序规则 从小到大
	printList(L);

	L.sort(myCompare); //指定规则,从大到小
	printList(L);
}

int main() {

	test01();

	system("pause");

	return 0;
}

1.4 总结:

  • 反转 --- reverse

  • 排序 --- sort (成员函数)

  • 所有不支持随机访问迭代器的容器不支持标准算法

  • 不支持随机访问迭代器的容器内部会提供对应的算法

  • sort(l.begin(), l.end()); 不支持全局函数排序

1.5 sort基本简介

sort 在 STL 库中是排序函数,有时冒泡、选择等 O(n2) 算法会超时时,我们可以使用 STL 中的快速排序函数 O(n log n) 完成排序

sort 在 algorithm 库里面,原型如下:

template <class RandomAccessIterator>
void sort ( RandomAccessIterator first, RandomAccessIterator last );
template <class RandomAccessIterator, class Compare>
void sort ( RandomAccessIterator first, RandomAccessIterator last, Compare comp );

其中 sort 有两种形式一个有三个参数,一个有两个参数

sort 的前两个参数是起始地址和终止地址

sort对基本类型集合(数组,vector等已支持<运算符的类型)排序 主要有以下几种情况:

1.默认排序函数

2.greater(升序)与less(降序)

3.自定义比较函数(注意格式)

4.lambda表达式

如:sort(a,a+n) 表示对 a[0] ... a[n-1] 排序

sort 对结构体排序

主要有以下几种方式:

1.自定义比较函数(作为sort第三个参数)

2.在结构体中重载<运算符(sort只需前两个参数)

3.lambda表达式